home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 July / Macworld (1999-07).dmg / Shareware World / Info / For Developers / Mops 3.4.sea / Mops ƒ / Struct < prev    next >
MacBinary  |  1999-01-28  |  30.0 KB  |  [TEXT/MSET]

open in: MacOS 8.1     |     Win98     |     DOS

view JSON data     |     view as text

This file was processed as: MacBinary (archive/macBinary).

You can browse this item here: Struct

ConfidenceProgramDetectionMatch TypeSupport
10% dexvert MacBinary (archive/macBinary) fallback Supported
10% dexvert Jesper Olsen Module (music/jesperOlsen) magic Supported
1% dexvert Text File (text/txt) fallback Supported
100% file MacBinary II, inited, Thu Jan 28 15:38:13 1999, modified Thu Jan 28 15:38:13 1999, creator 'MSET', type ASCII, 30116 bytes "Struct" , at 0x7624 381 bytes resource default (weak)
99% file data default
49% TrID Macintosh plain text (MacBinary) default
33% TrID TTComp archive compressed (bin-4K) default (weak)
16% TrID MacBinary 2 default (weak)
100% lsar MacBinary default


id metadata
keyvalue
macFileType[TEXT]
macFileCreator[MSET]



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 00 06 53 74 72 75 63 74 | 00 00 00 00 00 00 00 00 |..Struct|........|
|00000010| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000020| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000030| 00 00 00 00 00 00 00 00 | 00 00 00 00 00 00 00 00 |........|........|
|00000040| 00 54 45 58 54 4d 53 45 | 54 01 00 00 00 00 00 00 |.TEXTMSE|T.......|
|00000050| 00 00 00 00 00 75 a4 00 | 00 01 7d b2 d6 7b 35 b2 |.....u..|..}..{5.|
|00000060| d6 7b 35 00 00 06 00 00 | 00 00 00 00 00 00 00 00 |.{5.....|........|
|00000070| 00 00 00 00 00 00 00 00 | 00 00 81 81 97 09 00 00 |........|........|
|00000080| 5c 20 53 74 61 6e 64 61 | 72 64 20 64 61 74 61 20 |\ Standa|rd data |
|00000090| 73 74 72 75 63 74 75 72 | 65 20 63 6c 61 73 73 65 |structur|e classe|
|000000a0| 73 0d 0d 5c 20 4d 61 79 | 20 20 39 31 09 09 41 64 |s..\ May| 91..Ad|
|000000b0| 64 65 64 20 4c 6f 6e 67 | 77 6f 72 64 0d 5c 20 4a |ded Long|word.\ J|
|000000c0| 75 6e 65 20 39 31 09 09 | 52 65 69 6d 70 6c 65 6d |une 91..|Reimplem|
|000000d0| 65 6e 74 65 64 20 6f 72 | 64 65 72 65 64 2d 63 6f |ented or|dered-co|
|000000e0| 6c 20 65 74 63 2e 20 75 | 73 69 6e 67 20 6d 75 6c |l etc. u|sing mul|
|000000f0| 74 69 70 6c 65 20 69 6e | 68 65 72 69 74 61 6e 63 |tiple in|heritanc|
|00000100| 65 0d 5c 20 4d 61 79 20 | 20 39 32 09 09 41 64 64 |e.\ May | 92..Add|
|00000110| 65 64 20 6f 62 6a 5f 61 | 72 72 61 79 0d 5c 20 4a |ed obj_a|rray.\ J|
|00000120| 75 6c 79 20 39 32 09 09 | 46 69 78 65 64 20 4f 42 |uly 92..|Fixed OB|
|00000130| 4a 3a 20 4f 62 6a 48 61 | 6e 64 6c 65 20 74 6f 20 |J: ObjHa|ndle to |
|00000140| 75 73 65 20 4e 50 54 52 | 3a 20 69 6e 73 74 65 61 |use NPTR|: instea|
|00000150| 64 20 6f 66 20 50 54 52 | 3a 0d 5c 09 09 09 09 48 |d of PTR|:.\....H|
|00000160| 61 6e 64 6c 65 41 72 72 | 61 79 20 6e 6f 77 20 69 |andleArr|ay now i|
|00000170| 6e 68 65 72 69 74 73 20 | 66 72 6f 6d 20 4f 62 6a |nherits |from Obj|
|00000180| 5f 61 72 72 61 79 2e 0d | 5c 20 44 65 63 20 39 32 |_array..|\ Dec 92|
|00000190| 09 09 52 65 70 6c 61 63 | 65 64 20 55 47 45 54 3a |..Replac|ed UGET:|
|000001a0| 20 69 6e 20 49 6e 74 20 | 61 6e 64 20 42 79 74 65 | in Int |and Byte|
|000001b0| 20 77 69 74 68 20 6e 65 | 77 20 63 6c 61 73 73 65 | with ne|w classe|
|000001c0| 73 20 55 49 4e 54 20 61 | 6e 64 20 55 42 59 54 45 |s UINT a|nd UBYTE|
|000001d0| 2e 0d 0d 63 72 20 2e 28 | 20 6c 6f 61 64 69 6e 67 |...cr .(| loading|
|000001e0| 20 53 74 72 75 63 74 2e | 2e 2e 29 0d 0d 3a 63 6c | Struct.|..)..:cl|
|000001f0| 61 73 73 09 4c 4f 4e 47 | 57 4f 52 44 20 20 73 75 |ass.LONG|WORD su|
|00000200| 70 65 72 7b 20 6f 62 6a | 65 63 74 20 7d 09 5c 20 |per{ obj|ect }.\ |
|00000210| 47 65 6e 65 72 69 63 20 | 73 75 70 65 72 63 6c 61 |Generic |supercla|
|00000220| 73 73 20 66 6f 72 20 76 | 61 72 2c 20 68 61 6e 64 |ss for v|ar, hand|
|00000230| 6c 65 20 65 74 63 2e 0d | 0d 20 20 20 20 34 09 62 |le etc..|. 4.b|
|00000240| 79 74 65 73 09 64 61 74 | 61 0d 0d 3a 6d 20 43 4c |ytes.dat|a..:m CL|
|00000250| 45 41 52 3a 09 69 6e 6c | 69 6e 65 7b 20 30 20 6f |EAR:.inl|ine{ 0 o|
|00000260| 62 6a 20 21 7d 09 30 20 | 5e 62 61 73 65 20 21 20 |bj !}.0 |^base ! |
|00000270| 20 3b 6d 0d 3a 6d 20 47 | 45 54 3a 09 09 69 6e 6c | ;m.:m G|ET:..inl|
|00000280| 69 6e 65 7b 20 6f 62 6a | 20 40 7d 09 09 5e 62 61 |ine{ obj| @}..^ba|
|00000290| 73 65 20 40 20 20 3b 6d | 0d 3a 6d 20 50 55 54 3a |se @ ;m|.:m PUT:|
|000002a0| 09 09 69 6e 6c 69 6e 65 | 7b 20 6f 62 6a 20 21 7d |..inline|{ obj !}|
|000002b0| 09 09 5e 62 61 73 65 20 | 21 20 20 3b 6d 0d 3a 6d |..^base |! ;m.:m|
|000002c0| 20 2d 3e 3a 09 09 69 6e | 6c 69 6e 65 7b 20 40 20 | ->:..in|line{ @ |
|000002d0| 6f 62 6a 20 21 7d 09 63 | 68 6b 73 61 6d 65 20 20 |obj !}.c|hksame |
|000002e0| 40 20 20 70 75 74 3a 20 | 73 65 6c 66 20 20 3b 6d |@ put: |self ;m|
|000002f0| 0d 0d 3a 6d 20 50 52 49 | 4e 54 3a 09 5e 62 61 73 |..:m PRI|NT:.^bas|
|00000300| 65 20 40 20 20 2e 20 20 | 3b 6d 0d 0d 3a 6d 20 43 |e @ . |;m..:m C|
|00000310| 4c 41 53 53 49 4e 49 54 | 3a 09 63 6c 65 61 72 3a |LASSINIT|:.clear:|
|00000320| 20 73 65 6c 66 20 20 3b | 6d 0d 0d 3b 63 6c 61 73 | self ;|m..;clas|
|00000330| 73 0d 0d 0d 3a 63 6c 61 | 73 73 09 56 41 52 20 20 |s...:cla|ss.VAR |
|00000340| 73 75 70 65 72 7b 20 6c | 6f 6e 67 77 6f 72 64 20 |super{ l|ongword |
|00000350| 7d 0d 0d 3a 6d 20 2b 3a | 09 09 69 6e 6c 69 6e 65 |}..:m +:|..inline|
|00000360| 7b 20 6f 62 6a 20 2b 21 | 7d 09 5e 62 61 73 65 20 |{ obj +!|}.^base |
|00000370| 2b 21 20 20 20 3b 6d 0d | 3a 6d 20 2d 3a 09 09 69 |+! ;m.|:m -:..i|
|00000380| 6e 6c 69 6e 65 7b 20 6f | 62 6a 20 2d 21 7d 09 5e |nline{ o|bj -!}.^|
|00000390| 62 61 73 65 20 2d 21 20 | 20 20 3b 6d 0d 0d 3b 63 |base -! | ;m..;c|
|000003a0| 6c 61 73 73 0d 0d 0d 3a | 63 6c 61 73 73 09 49 4e |lass...:|class.IN|
|000003b0| 54 09 73 75 70 65 72 7b | 20 6f 62 6a 65 63 74 20 |T.super{| object |
|000003c0| 7d 0d 0d 09 32 20 62 79 | 74 65 73 20 64 61 74 61 |}...2 by|tes data|
|000003d0| 0d 0d 3a 6d 20 43 4c 45 | 41 52 3a 09 69 6e 6c 69 |..:m CLE|AR:.inli|
|000003e0| 6e 65 7b 20 30 20 6f 62 | 6a 20 77 21 7d 09 30 20 |ne{ 0 ob|j w!}.0 |
|000003f0| 5e 62 61 73 65 20 77 21 | 20 20 3b 6d 0d 3a 6d 20 |^base w!| ;m.:m |
|00000400| 47 45 54 3a 09 09 69 6e | 6c 69 6e 65 7b 20 6f 62 |GET:..in|line{ ob|
|00000410| 6a 20 77 40 78 7d 09 5e | 62 61 73 65 20 77 40 78 |j w@x}.^|base w@x|
|00000420| 20 20 3b 6d 0d 3a 6d 20 | 50 55 54 3a 09 09 69 6e | ;m.:m |PUT:..in|
|00000430| 6c 69 6e 65 7b 20 6f 62 | 6a 20 77 21 7d 09 09 5e |line{ ob|j w!}..^|
|00000440| 62 61 73 65 20 77 21 20 | 20 3b 6d 0d 3a 6d 20 2b |base w! | ;m.:m +|
|00000450| 3a 09 09 69 6e 6c 69 6e | 65 7b 20 6f 62 6a 20 77 |:..inlin|e{ obj w|
|00000460| 2b 21 7d 09 5e 62 61 73 | 65 20 77 2b 21 20 20 3b |+!}.^bas|e w+! ;|
|00000470| 6d 0d 3a 6d 20 2d 3a 09 | 09 69 6e 6c 69 6e 65 7b |m.:m -:.|.inline{|
|00000480| 20 6f 62 6a 20 77 2d 21 | 7d 09 5e 62 61 73 65 20 | obj w-!|}.^base |
|00000490| 77 2d 21 20 20 3b 6d 0d | 3a 6d 20 2d 3e 3a 09 09 |w-! ;m.|:m ->:..|
|000004a0| 69 6e 6c 69 6e 65 7b 20 | 77 40 20 6f 62 6a 20 77 |inline{ |w@ obj w|
|000004b0| 21 7d 0d 09 09 63 68 6b | 73 61 6d 65 20 20 77 40 |!}...chk|same w@|
|000004c0| 20 20 70 75 74 3a 20 73 | 65 6c 66 20 20 3b 6d 0d | put: s|elf ;m.|
|000004d0| 0d 3a 6d 20 49 4e 54 3a | 09 09 5e 62 61 73 65 20 |.:m INT:|..^base |
|000004e0| 77 40 20 20 6d 61 6b 65 | 69 6e 74 20 20 3b 6d 09 |w@ make|int ;m.|
|000004f0| 5c 20 72 65 74 75 72 6e | 20 61 73 20 74 6f 6f 6c |\ return| as tool|
|00000500| 62 6f 78 20 69 6e 74 0d | 0d 3a 6d 20 50 52 49 4e |box int.|.:m PRIN|
|00000510| 54 3a 09 5e 62 61 73 65 | 20 77 40 78 20 20 2e 20 |T:.^base| w@x . |
|00000520| 20 3b 6d 0d 0d 3a 6d 20 | 43 4c 41 53 53 49 4e 49 | ;m..:m |CLASSINI|
|00000530| 54 3a 09 63 6c 65 61 72 | 3a 20 73 65 6c 66 20 20 |T:.clear|: self |
|00000540| 3b 6d 0d 0d 3b 63 6c 61 | 73 73 0d 0d 3a 63 6c 61 |;m..;cla|ss..:cla|
|00000550| 73 73 20 20 55 49 4e 54 | 20 20 73 75 70 65 72 7b |ss UINT| super{|
|00000560| 20 69 6e 74 20 7d 0d 0d | 3a 6d 20 47 45 54 3a 09 | int }..|:m GET:.|
|00000570| 69 6e 6c 69 6e 65 7b 20 | 6f 62 6a 20 77 40 7d 20 |inline{ |obj w@} |
|00000580| 20 5e 62 61 73 65 20 77 | 40 20 20 3b 6d 0d 0d 3a | ^base w|@ ;m..:|
|00000590| 6d 20 50 52 49 4e 54 3a | 09 5e 62 61 73 65 20 77 |m PRINT:|.^base w|
|000005a0| 40 20 20 2e 20 20 3b 6d | 0d 0d 3b 63 6c 61 73 73 |@ . ;m|..;class|
|000005b0| 0d 0d 0d 3a 63 6c 61 73 | 73 09 42 59 54 45 09 73 |...:clas|s.BYTE.s|
|000005c0| 75 70 65 72 7b 20 6f 62 | 6a 65 63 74 20 7d 0d 0d |uper{ ob|ject }..|
|000005d0| 09 31 20 62 79 74 65 73 | 20 64 61 74 61 0d 0d 3a |.1 bytes| data..:|
|000005e0| 6d 20 43 4c 45 41 52 3a | 09 69 6e 6c 69 6e 65 7b |m CLEAR:|.inline{|
|000005f0| 20 30 20 6f 62 6a 20 63 | 21 7d 09 30 20 5e 62 61 | 0 obj c|!}.0 ^ba|
|00000600| 73 65 20 63 21 20 20 3b | 6d 0d 3a 6d 20 47 45 54 |se c! ;|m.:m GET|
|00000610| 3a 09 09 69 6e 6c 69 6e | 65 7b 20 6f 62 6a 20 63 |:..inlin|e{ obj c|
|00000620| 40 78 7d 09 5e 62 61 73 | 65 20 63 40 78 20 20 3b |@x}.^bas|e c@x ;|
|00000630| 6d 0d 3a 6d 20 50 55 54 | 3a 09 09 69 6e 6c 69 6e |m.:m PUT|:..inlin|
|00000640| 65 7b 20 6f 62 6a 20 63 | 21 7d 09 09 5e 62 61 73 |e{ obj c|!}..^bas|
|00000650| 65 20 63 21 20 20 3b 6d | 0d 3a 6d 20 2b 3a 09 09 |e c! ;m|.:m +:..|
|00000660| 69 6e 6c 69 6e 65 7b 20 | 5e 62 61 73 65 20 63 40 |inline{ |^base c@|
|00000670| 20 2b 20 5e 62 61 73 65 | 20 63 21 7d 20 20 3b 6d | + ^base| c!} ;m|
|00000680| 0d 3a 6d 20 2d 3a 09 09 | 69 6e 6c 69 6e 65 7b 20 |.:m -:..|inline{ |
|00000690| 6e 65 67 61 74 65 20 5e | 62 61 73 65 20 63 40 20 |negate ^|base c@ |
|000006a0| 2b 20 5e 62 61 73 65 20 | 63 21 7d 20 20 3b 6d 0d |+ ^base |c!} ;m.|
|000006b0| 3a 6d 20 2d 3e 3a 09 09 | 69 6e 6c 69 6e 65 7b 20 |:m ->:..|inline{ |
|000006c0| 63 40 20 6f 62 6a 20 63 | 21 7d 09 63 68 6b 73 61 |c@ obj c|!}.chksa|
|000006d0| 6d 65 20 20 63 40 20 20 | 70 75 74 3a 20 73 65 6c |me c@ |put: sel|
|000006e0| 66 20 20 3b 6d 0d 0d 3a | 6d 20 50 52 49 4e 54 3a |f ;m..:|m PRINT:|
|000006f0| 09 5e 62 61 73 65 20 63 | 40 78 20 20 2e 20 20 3b |.^base c|@x . ;|
|00000700| 6d 0d 0d 3a 6d 20 43 4c | 41 53 53 49 4e 49 54 3a |m..:m CL|ASSINIT:|
|00000710| 09 63 6c 65 61 72 3a 20 | 73 65 6c 66 20 20 3b 6d |.clear: |self ;m|
|00000720| 0d 0d 3b 63 6c 61 73 73 | 0d 0d 0d 3a 63 6c 61 73 |..;class|...:clas|
|00000730| 73 20 20 55 42 59 54 45 | 20 20 73 75 70 65 72 7b |s UBYTE| super{|
|00000740| 20 62 79 74 65 20 7d 0d | 0d 3a 6d 20 47 45 54 3a | byte }.|.:m GET:|
|00000750| 09 09 69 6e 6c 69 6e 65 | 7b 20 6f 62 6a 20 63 40 |..inline|{ obj c@|
|00000760| 7d 09 5e 62 61 73 65 20 | 63 40 20 20 3b 6d 0d 0d |}.^base |c@ ;m..|
|00000770| 3a 6d 20 50 52 49 4e 54 | 3a 09 5e 62 61 73 65 20 |:m PRINT|:.^base |
|00000780| 63 40 20 20 2e 20 20 3b | 6d 0d 0d 3b 63 6c 61 73 |c@ . ;|m..;clas|
|00000790| 73 0d 0d 0d 3a 63 6c 61 | 73 73 09 42 4f 4f 4c 09 |s...:cla|ss.BOOL.|
|000007a0| 73 75 70 65 72 7b 20 62 | 79 74 65 20 7d 0d 0d 3a |super{ b|yte }..:|
|000007b0| 6d 20 50 55 54 3a 09 09 | 69 6e 6c 69 6e 65 7b 20 |m PUT:..|inline{ |
|000007c0| 30 3c 3e 20 6f 62 6a 20 | 63 21 7d 09 09 30 3c 3e |0<> obj |c!}..0<>|
|000007d0| 20 20 5e 62 61 73 65 20 | 63 21 20 20 3b 6d 0d 3a | ^base |c! ;m.:|
|000007e0| 6d 20 53 45 54 3a 09 09 | 69 6e 6c 69 6e 65 7b 20 |m SET:..|inline{ |
|000007f0| 74 72 75 65 20 6f 62 6a | 20 63 21 7d 09 74 72 75 |true obj| c!}.tru|
|00000800| 65 20 20 5e 62 61 73 65 | 20 63 21 20 20 3b 6d 0d |e ^base| c! ;m.|
|00000810| 09 09 5c 20 6e 6f 74 65 | 20 2d 20 43 4c 45 41 52 |..\ note| - CLEAR|
|00000820| 3a 20 69 73 20 64 65 66 | 69 6e 65 64 20 69 6e 20 |: is def|ined in |
|00000830| 74 68 65 20 73 75 70 65 | 72 63 6c 61 73 73 20 42 |the supe|rclass B|
|00000840| 79 74 65 0d 0d 3a 6d 20 | 4e 4f 54 3a 09 09 69 6e |yte..:m |NOT:..in|
|00000850| 6c 69 6e 65 7b 20 6f 62 | 6a 20 63 40 20 6e 6f 74 |line{ ob|j c@ not|
|00000860| 20 6f 62 6a 20 63 21 7d | 09 5e 62 61 73 65 20 63 | obj c!}|.^base c|
|00000870| 40 20 6e 6f 74 20 5e 62 | 61 73 65 20 63 21 20 20 |@ not ^b|ase c! |
|00000880| 3b 6d 0d 0d 3a 6d 20 50 | 52 49 4e 54 3a 09 67 65 |;m..:m P|RINT:.ge|
|00000890| 74 3a 20 73 65 6c 66 20 | 20 49 46 20 20 2e 22 20 |t: self | IF ." |
|000008a0| 74 72 75 65 22 20 20 45 | 4c 53 45 20 20 2e 22 20 |true" E|LSE ." |
|000008b0| 66 61 6c 73 65 22 20 20 | 54 48 45 4e 20 20 3b 6d |false" |THEN ;m|
|000008c0| 0d 0d 3b 63 6c 61 73 73 | 0d 0d 0d 5c 20 48 61 6e |..;class|...\ Han|
|000008d0| 64 6c 65 20 63 6c 61 73 | 73 20 63 61 6e 20 73 74 |dle clas|s can st|
|000008e0| 6f 72 65 20 68 61 6e 64 | 6c 65 73 20 74 6f 20 72 |ore hand|les to r|
|000008f0| 65 6c 6f 63 61 74 61 62 | 6c 65 20 68 65 61 70 20 |elocatab|le heap |
|00000900| 62 6c 6f 63 6b 73 2e 0d | 5c 20 49 74 20 77 6f 75 |blocks..|\ It wou|
|00000910| 6c 64 20 62 65 20 6e 69 | 63 65 20 74 6f 20 73 74 |ld be ni|ce to st|
|00000920| 6f 72 65 20 74 68 65 20 | 6c 65 6e 67 74 68 20 74 |ore the |length t|
|00000930| 6f 6f 2c 20 62 75 74 20 | 74 68 69 73 20 63 6c 61 |oo, but |this cla|
|00000940| 73 73 20 69 73 20 75 73 | 65 64 0d 5c 20 66 6f 72 |ss is us|ed.\ for|
|00000950| 20 68 61 6e 64 6c 65 73 | 20 69 6e 20 74 6f 6f 6c | handles| in tool|
|00000960| 62 6f 78 20 72 65 63 6f | 72 64 73 20 73 6f 20 77 |box reco|rds so w|
|00000970| 65 20 63 61 6e 27 74 2e | 20 20 4e 6f 74 20 68 65 |e can't.| Not he|
|00000980| 72 65 20 61 74 20 6c 65 | 61 73 74 2e 0d 0d 20 20 |re at le|ast... |
|00000990| 20 20 30 09 76 61 6c 75 | 65 09 52 45 4c 43 4e 54 | 0.valu|e.RELCNT|
|000009a0| 09 09 5c 20 46 6f 72 20 | 74 65 73 74 69 6e 67 20 |..\ For |testing |
|000009b0| 2d 20 63 6f 75 6e 74 73 | 20 72 65 6c 65 61 73 65 |- counts| release|
|000009c0| 3a 20 6d 73 67 73 0d 09 | 09 09 09 09 09 09 5c 20 |: msgs..|......\ |
|000009d0| 74 6f 20 6d 61 6b 65 20 | 73 75 72 65 20 77 65 27 |to make |sure we'|
|000009e0| 72 65 20 72 65 6c 65 61 | 73 69 6e 67 20 65 76 65 |re relea|sing eve|
|000009f0| 72 79 74 68 69 6e 67 0d | 0d 3a 63 6c 61 73 73 09 |rything.|.:class.|
|00000a00| 48 41 4e 44 4c 45 09 73 | 75 70 65 72 7b 20 6c 6f |HANDLE.s|uper{ lo|
|00000a10| 6e 67 77 6f 72 64 20 7d | 0d 0d 3a 6d 20 50 54 52 |ngword }|..:m PTR|
|00000a20| 3a 09 09 5c 20 44 65 72 | 65 66 65 72 65 6e 63 65 |:..\ Der|eference|
|00000a30| 73 20 68 61 6e 64 6c 65 | 20 74 6f 20 67 65 74 20 |s handle| to get |
|00000a40| 70 6f 69 6e 74 65 72 2e | 20 20 54 72 61 70 20 69 |pointer.| Trap i|
|00000a50| 66 20 6e 69 6c 2e 0d 09 | 69 6e 6c 69 6e 65 7b 20 |f nil...|inline{ |
|00000a60| 6f 62 6a 20 40 20 40 7d | 09 5e 62 61 73 65 20 40 |obj @ @}|.^base @|
|00000a70| 20 40 20 20 3b 6d 0d 0d | 3a 6d 20 4e 50 54 52 3a | @ ;m..|:m NPTR:|
|00000a80| 09 09 5c 20 44 65 72 65 | 66 65 72 65 6e 63 65 73 |..\ Dere|ferences|
|00000a90| 20 68 61 6e 64 6c 65 20 | 61 6e 64 20 6d 61 73 6b | handle |and mask|
|00000aa0| 73 20 77 69 74 68 20 53 | 41 6d 61 73 6b 20 73 6f |s with S|Amask so|
|00000ab0| 20 77 65 20 63 61 6e 0d | 09 09 09 09 5c 20 75 73 | we can.|....\ us|
|00000ac0| 65 20 74 68 65 20 70 6f | 69 6e 74 65 72 20 6e 75 |e the po|inter nu|
|00000ad0| 6d 65 72 69 63 61 6c 6c | 79 2e 0d 09 5e 62 61 73 |mericall|y...^bas|
|00000ae0| 65 20 40 20 40 20 53 41 | 6d 61 73 6b 20 61 6e 64 |e @ @ SA|mask and|
|00000af0| 20 20 3b 6d 0d 0d 3a 6d | 20 52 45 4c 45 41 53 45 | ;m..:m| RELEASE|
|00000b00| 3a 09 09 5c 20 44 65 61 | 6c 6c 6f 63 61 74 65 73 |:..\ Dea|llocates|
|00000b10| 20 74 68 65 20 68 65 61 | 70 20 62 6c 6f 63 6b 2c | the hea|p block,|
|00000b20| 20 69 66 20 61 6c 6c 6f | 63 61 74 65 64 2e 0d 09 | if allo|cated...|
|00000b30| 31 20 2b 2b 3e 20 72 65 | 6c 43 6e 74 20 20 6b 69 |1 ++> re|lCnt ki|
|00000b40| 6c 6c 48 20 20 3b 6d 0d | 0d 3a 6d 20 43 4c 45 41 |llH ;m.|.:m CLEA|
|00000b50| 52 3a 09 6e 69 6c 48 20 | 20 5e 62 61 73 65 20 21 |R:.nilH | ^base !|
|00000b60| 20 20 3b 6d 09 5c 20 57 | 65 20 68 6f 70 65 20 77 | ;m.\ W|e hope w|
|00000b70| 65 20 6b 6e 6f 77 20 77 | 68 61 74 20 77 65 27 72 |e know w|hat we'r|
|00000b80| 65 20 64 6f 69 6e 67 2e | 0d 0d 3a 6d 20 4e 49 4c |e doing.|..:m NIL|
|00000b90| 3f 3a 09 09 5c 20 28 20 | 2d 2d 20 62 20 29 0d 09 |?:..\ ( |-- b )..|
|00000ba0| 67 65 74 3a 20 73 65 6c | 66 20 20 6e 69 6c 48 20 |get: sel|f nilH |
|00000bb0| 3d 20 20 3b 6d 0d 0d 3a | 6d 20 53 45 54 53 49 5a |= ;m..:|m SETSIZ|
|00000bc0| 45 3a 09 5c 20 28 20 73 | 69 7a 65 20 2d 2d 20 7d |E:.\ ( s|ize -- }|
|00000bd0| 0d 09 73 65 74 48 73 7a | 20 20 30 3d 20 3f 65 72 |..setHsz| 0= ?er|
|00000be0| 72 6f 72 20 31 36 36 20 | 20 3b 6d 0d 0d 3a 6d 20 |ror 166 | ;m..:m |
|00000bf0| 53 49 5a 45 3a 09 09 5c | 20 28 20 2d 2d 20 73 69 |SIZE:..\| ( -- si|
|00000c00| 7a 65 20 29 20 20 47 65 | 74 73 20 63 75 72 72 65 |ze ) Ge|ts curre|
|00000c10| 6e 74 20 73 69 7a 65 2e | 0d 09 67 65 74 48 53 7a |nt size.|..getHSz|
|00000c20| 20 20 3b 6d 0d 0d 3a 6d | 20 4e 45 57 3a 09 09 5c | ;m..:m| NEW:..\|
|00000c30| 20 28 20 73 69 7a 65 20 | 2d 2d 20 29 0d 09 6e 65 | ( size |-- )..ne|
|00000c40| 77 48 20 20 30 3d 20 3f | 65 72 72 6f 72 20 31 36 |wH 0= ?|error 16|
|00000c50| 36 20 20 3b 6d 0d 0d 3a | 6d 20 4c 4f 43 4b 3a 09 |6 ;m..:|m LOCK:.|
|00000c60| 6c 6f 6b 20 20 20 20 3b | 6d 0d 3a 6d 20 55 4e 4c |lok ;|m.:m UNL|
|00000c70| 4f 43 4b 3a 09 75 6e 6c | 6f 6b 20 20 3b 6d 0d 0d |OCK:.unl|ok ;m..|
|00000c80| 3a 6d 20 47 45 54 53 54 | 41 54 45 3a 20 20 28 20 |:m GETST|ATE: ( |
|00000c90| 2d 2d 20 73 74 61 74 65 | 20 29 09 48 67 65 74 53 |-- state| ).HgetS|
|00000ca0| 74 20 20 3b 6d 0d 3a 6d | 20 53 45 54 53 54 41 54 |t ;m.:m| SETSTAT|
|00000cb0| 45 3a 20 20 28 20 73 74 | 61 74 65 20 2d 2d 20 29 |E: ( st|ate -- )|
|00000cc0| 09 48 73 65 74 53 74 20 | 20 3b 6d 0d 0d 3a 6d 20 |.HsetSt | ;m..:m |
|00000cd0| 4c 4f 43 4b 45 44 3f 3a | 20 20 20 28 20 2d 2d 20 |LOCKED?:| ( -- |
|00000ce0| 62 20 29 09 09 48 67 65 | 74 53 74 20 20 24 20 38 |b )..Hge|tSt $ 8|
|00000cf0| 30 20 61 6e 64 20 20 30 | 3c 3e 20 20 3b 6d 0d 0d |0 and 0|<> ;m..|
|00000d00| 3a 6d 20 4d 4f 56 45 48 | 49 3a 09 4d 76 48 48 69 |:m MOVEH|I:.MvHHi|
|00000d10| 20 20 64 72 6f 70 20 28 | 20 65 72 72 6f 72 73 20 | drop (| errors |
|00000d20| 64 6f 6e 27 74 20 72 65 | 61 6c 6c 79 20 6d 61 74 |don't re|ally mat|
|00000d30| 74 65 72 20 68 65 72 65 | 20 29 20 20 3b 6d 0d 0d |ter here| ) ;m..|
|00000d40| 3a 6d 20 2d 3e 3a 09 09 | 5c 20 28 20 5e 68 64 6c |:m ->:..|\ ( ^hdl|
|00000d50| 20 2d 2d 20 29 20 20 43 | 6f 70 69 65 73 20 70 61 | -- ) C|opies pa|
|00000d60| 73 73 65 64 2d 69 6e 20 | 68 61 6e 64 6c 65 27 73 |ssed-in |handle's|
|00000d70| 20 68 65 61 70 20 64 61 | 74 61 20 74 6f 20 73 65 | heap da|ta to se|
|00000d80| 6c 66 2e 0d 09 5c 20 77 | 65 20 44 4f 4e 27 54 20 |lf...\ w|e DON'T |
|00000d90| 72 65 6c 65 61 73 65 20 | 61 6e 79 20 68 65 61 70 |release |any heap|
|00000da0| 20 62 6c 6f 63 6b 20 77 | 65 20 68 61 76 65 20 61 | block w|e have a|
|00000db0| 6c 72 65 61 64 79 20 2d | 20 77 65 20 61 73 73 75 |lready -| we assu|
|00000dc0| 6d 65 20 69 74 27 73 0d | 09 5c 20 20 61 6c 72 65 |me it's.|.\ alre|
|00000dd0| 61 64 79 20 72 65 6c 65 | 61 73 65 64 2c 20 6f 72 |ady rele|ased, or|
|00000de0| 20 77 65 20 68 61 76 65 | 20 61 6e 6f 74 68 65 72 | we have| another|
|00000df0| 20 68 61 6e 64 6c 65 20 | 74 6f 20 69 74 2e 0d 0d | handle |to it...|
|00000e00| 09 63 68 6b 53 61 6d 65 | 20 20 63 6f 70 79 48 20 |.chkSame| copyH |
|00000e10| 20 3f 65 72 72 6f 72 20 | 31 36 37 20 20 3b 6d 0d | ?error |167 ;m.|
|00000e20| 0d 5c 20 46 6f 72 20 53 | 45 4e 44 3a 20 61 6e 64 |.\ For S|END: and|
|00000e30| 20 42 52 49 4e 47 3a 2c | 20 77 65 20 74 72 61 6e | BRING:,| we tran|
|00000e40| 73 66 65 72 20 74 68 65 | 20 6c 65 6e 67 74 68 2c |sfer the| length,|
|00000e50| 20 74 68 65 6e 20 74 68 | 65 20 62 79 74 65 73 20 | then th|e bytes |
|00000e60| 69 6e 20 74 68 65 20 68 | 61 6e 64 6c 65 2e 0d 5c |in the h|andle..\|
|00000e70| 20 20 41 20 6c 65 6e 67 | 74 68 20 6f 66 20 2d 31 | A leng|th of -1|
|00000e80| 20 6d 65 61 6e 73 20 69 | 74 27 73 20 6e 69 6c 2e | means i|t's nil.|
|00000e90| 0d 0d 3a 6d 20 53 45 4e | 44 3a 20 20 7b 20 73 74 |..:m SEN|D: { st|
|00000ea0| 72 65 61 6d 20 5c 20 73 | 76 53 74 61 74 65 20 6e |ream \ s|vState n|
|00000eb0| 69 6c 3f 20 2d 2d 20 7d | 0d 09 6e 69 6c 3f 3a 20 |il? -- }|..nil?: |
|00000ec0| 73 65 6c 66 20 20 64 75 | 70 20 2d 3e 20 6e 69 6c |self du|p -> nil|
|00000ed0| 3f 0d 09 49 46 09 09 2d | 31 0d 09 45 4c 53 45 09 |?..IF..-|1..ELSE.|
|00000ee0| 73 69 7a 65 3a 20 73 65 | 6c 66 0d 09 54 48 45 4e |size: se|lf..THEN|
|00000ef0| 0d 09 70 61 64 20 21 20 | 20 70 61 64 20 34 20 77 |..pad ! | pad 4 w|
|00000f00| 72 69 74 65 3a 20 5b 20 | 73 74 72 65 61 6d 20 5d |rite: [ |stream ]|
|00000f10| 20 20 4f 4b 3f 0d 09 0d | 09 6e 69 6c 3f 0d 09 4e | OK?...|.nil?..N|
|00000f20| 49 46 09 67 65 74 73 74 | 61 74 65 3a 20 73 65 6c |IF.getst|ate: sel|
|00000f30| 66 20 2d 3e 20 73 76 53 | 74 61 74 65 0d 09 09 6c |f -> svS|tate...l|
|00000f40| 6f 63 6b 3a 20 73 65 6c | 66 0d 09 09 5e 62 61 73 |ock: sel|f...^bas|
|00000f50| 65 20 40 20 40 20 20 73 | 69 7a 65 3a 20 73 65 6c |e @ @ s|ize: sel|
|00000f60| 66 20 20 77 72 69 74 65 | 3a 20 5b 20 73 74 72 65 |f write|: [ stre|
|00000f70| 61 6d 20 5d 20 20 4f 4b | 3f 0d 09 09 73 76 53 74 |am ] OK|?...svSt|
|00000f80| 61 74 65 20 73 65 74 73 | 74 61 74 65 3a 20 73 65 |ate sets|tate: se|
|00000f90| 6c 66 0d 09 54 48 45 4e | 0d 3b 6d 0d 0d 3a 6d 20 |lf..THEN|.;m..:m |
|00000fa0| 42 52 49 4e 47 3a 20 20 | 7b 20 73 74 72 65 61 6d |BRING: |{ stream|
|00000fb0| 20 5c 20 73 69 7a 65 20 | 2d 2d 20 7d 0d 09 70 61 | \ size |-- }..pa|
|00000fc0| 64 20 34 20 72 65 61 64 | 3a 20 5b 20 73 74 72 65 |d 4 read|: [ stre|
|00000fd0| 61 6d 20 5d 0d 09 70 61 | 64 20 40 20 20 2d 3e 20 |am ]..pa|d @ -> |
|00000fe0| 73 69 7a 65 0d 09 73 69 | 7a 65 20 2d 31 20 3d 0d |size..si|ze -1 =.|
|00000ff0| 09 49 46 09 09 6e 69 6c | 48 20 62 61 73 65 20 21 |.IF..nil|H base !|
|00001000| 09 09 09 5c 20 69 74 20 | 73 68 6f 75 6c 64 20 68 |...\ it |should h|
|00001010| 61 76 65 20 62 65 65 6e | 20 61 6c 72 65 61 64 79 |ave been| already|
|00001020| 0d 09 45 4c 53 45 09 73 | 69 7a 65 20 20 6e 65 77 |..ELSE.s|ize new|
|00001030| 3a 20 73 65 6c 66 0d 09 | 09 09 6c 6f 63 6b 3a 20 |: self..|..lock: |
|00001040| 73 65 6c 66 0d 09 09 09 | 5e 62 61 73 65 20 40 20 |self....|^base @ |
|00001050| 40 20 20 73 69 7a 65 20 | 20 72 65 61 64 3a 20 5b |@ size | read: [|
|00001060| 20 73 74 72 65 61 6d 20 | 5d 20 20 4f 4b 3f 0d 09 | stream |] OK?..|
|00001070| 54 48 45 4e 0d 3b 6d 0d | 0d 3a 6d 20 50 52 49 4e |THEN.;m.|.:m PRIN|
|00001080| 54 3a 0d 09 26 20 24 20 | 65 6d 69 74 20 20 5e 62 |T:..& $ |emit ^b|
|00001090| 61 73 65 20 40 20 20 75 | 2e 68 20 20 3b 6d 09 5c |ase @ u|.h ;m.\|
|000010a0| 20 57 65 20 61 73 73 75 | 6d 65 20 61 20 70 72 69 | We assu|me a pri|
|000010b0| 6e 74 3a 20 6f 66 20 61 | 20 68 61 6e 64 6c 65 20 |nt: of a| handle |
|000010c0| 69 73 20 6d 6f 72 65 0d | 09 09 09 09 09 09 09 09 |is more.|........|
|000010d0| 5c 20 20 75 73 65 66 75 | 6c 20 69 6e 20 68 65 78 |\ usefu|l in hex|
|000010e0| 2e 0d 0d 3a 6d 20 43 4c | 41 53 53 49 4e 49 54 3a |...:m CL|ASSINIT:|
|000010f0| 09 63 6c 65 61 72 3a 20 | 73 65 6c 66 20 20 3b 6d |.clear: |self ;m|
|00001100| 09 09 5c 20 49 6e 69 74 | 69 61 6c 6c 79 20 6e 69 |..\ Init|ially ni|
|00001110| 6c 0d 0d 3b 63 6c 61 73 | 73 0d 0d 0d 5c 20 4f 42 |l..;clas|s...\ OB|
|00001120| 4a 48 41 4e 44 4c 45 20 | 69 73 20 61 20 68 61 6e |JHANDLE |is a han|
|00001130| 64 6c 65 20 74 68 61 74 | 20 70 6f 69 6e 74 73 20 |dle that| points |
|00001140| 74 6f 20 61 6e 20 6f 62 | 6a 65 63 74 20 69 6e 20 |to an ob|ject in |
|00001150| 74 68 65 20 68 65 61 70 | 2e 0d 0d 3a 63 6c 61 73 |the heap|...:clas|
|00001160| 73 09 4f 42 4a 48 41 4e | 44 4c 45 20 20 73 75 70 |s.OBJHAN|DLE sup|
|00001170| 65 72 7b 20 68 61 6e 64 | 6c 65 20 7d 0d 0d 3a 6d |er{ hand|le }..:m|
|00001180| 20 4f 42 4a 3a 09 09 6d | 6f 76 65 48 69 3a 20 73 | OBJ:..m|oveHi: s|
|00001190| 65 6c 66 20 20 6c 6f 63 | 6b 3a 20 73 65 6c 66 20 |elf loc|k: self |
|000011a0| 20 6e 70 74 72 3a 20 73 | 65 6c 66 20 20 3e 6f 62 | nptr: s|elf >ob|
|000011b0| 6a 20 20 3b 6d 0d 0d 09 | 5c 20 4e 6f 74 65 3a 20 |j ;m...|\ Note: |
|000011c0| 69 66 20 77 65 27 72 65 | 20 67 6f 69 6e 67 20 74 |if we're| going t|
|000011d0| 6f 20 62 69 6e 64 20 74 | 6f 20 61 20 68 65 61 70 |o bind t|o a heap|
|000011e0| 2d 62 61 73 65 64 20 6f | 62 6a 65 63 74 2c 0d 09 |-based o|bject,..|
|000011f0| 5c 20 74 68 65 20 68 61 | 6e 64 6c 65 20 4d 55 53 |\ the ha|ndle MUS|
|00001200| 54 20 62 65 20 6c 6f 63 | 6b 65 64 20 77 68 69 6c |T be loc|ked whil|
|00001210| 65 20 77 65 20 64 6f 20 | 73 6f 20 2d 20 61 6e 79 |e we do |so - any|
|00001220| 74 68 69 6e 67 0d 09 5c | 20 6d 61 79 20 68 61 70 |thing..\| may hap|
|00001230| 70 65 6e 20 62 65 66 6f | 72 65 20 74 68 65 20 6d |pen befo|re the m|
|00001240| 65 74 68 6f 64 20 72 65 | 74 75 72 6e 73 21 21 20 |ethod re|turns!! |
|00001250| 20 54 68 75 73 20 77 65 | 20 6d 61 6b 65 20 74 68 | Thus we| make th|
|00001260| 65 0d 09 5c 20 6f 62 6a | 3a 20 6d 65 74 68 6f 64 |e..\ obj|: method|
|00001270| 20 64 6f 20 61 20 6d 6f | 76 65 48 69 20 61 6e 64 | do a mo|veHi and|
|00001280| 20 6c 6f 63 6b 2e 20 20 | 42 75 74 20 72 65 6d 65 | lock. |But reme|
|00001290| 6d 62 65 72 20 74 6f 20 | 75 6e 6c 6f 63 6b 0d 09 |mber to |unlock..|
|000012a0| 5c 20 74 68 65 20 68 61 | 6e 64 6c 65 20 65 76 65 |\ the ha|ndle eve|
|000012b0| 6e 74 75 61 6c 6c 79 21 | 20 20 28 55 6e 6c 65 73 |ntually!| (Unles|
|000012c0| 73 20 79 6f 75 27 72 65 | 20 72 65 6c 65 61 73 69 |s you're| releasi|
|000012d0| 6e 67 20 69 74 2c 20 6f | 66 20 63 6f 75 72 73 65 |ng it, o|f course|
|000012e0| 2e 29 0d 0d 3a 6d 20 4e | 45 57 4f 42 4a 3a 20 20 |.)..:m N|EWOBJ: |
|000012f0| 28 20 23 65 6c 73 20 29 | 20 7b 20 5e 63 6c 61 73 |( #els )| { ^clas|
|00001300| 73 20 2d 2d 20 7d 0d 09 | 09 5c 20 55 73 61 67 65 |s -- }..|.\ Usage|
|00001310| 3a 20 20 35 20 20 5b 27 | 5d 20 73 6f 6d 65 43 6c |: 5 ['|] someCl|
|00001320| 61 73 73 20 20 6e 65 77 | 4f 62 6a 3a 20 73 6f 6d |ass new|Obj: som|
|00001330| 65 48 6e 64 6c 0d 0d 09 | 5e 63 6c 61 73 73 20 20 |eHndl...|^class |
|00001340| 63 6c 3e 6c 65 6e 20 20 | 38 20 2b 20 20 6e 65 77 |cl>len |8 + new|
|00001350| 3a 20 73 65 6c 66 0d 09 | 5e 63 6c 61 73 73 20 20 |: self..|^class |
|00001360| 6f 62 6a 3a 20 73 65 6c | 66 20 20 6d 61 6b 65 5f |obj: sel|f make_|
|00001370| 6f 62 6a 20 20 75 6e 6c | 6f 63 6b 3a 20 73 65 6c |obj unl|ock: sel|
|00001380| 66 20 20 3b 6d 0d 0d 0d | 5c 20 4e 6f 74 65 3a 20 |f ;m...|\ Note: |
|00001390| 77 65 20 64 65 66 69 6e | 65 20 62 6f 74 68 20 72 |we defin|e both r|
|000013a0| 65 6c 65 61 73 65 3a 20 | 61 6e 64 20 72 65 6c 65 |elease: |and rele|
|000013b0| 61 73 65 4f 62 6a 3a 20 | 73 6f 20 74 68 61 74 20 |aseObj: |so that |
|000013c0| 69 6e 20 63 6c 61 73 73 | 65 73 0d 5c 20 48 61 6e |in class|es.\ Han|
|000013d0| 64 6c 65 41 72 72 61 79 | 20 61 6e 64 20 48 61 6e |dleArray| and Han|
|000013e0| 64 6c 65 4c 69 73 74 20 | 77 65 20 63 61 6e 20 64 |dleList |we can d|
|000013f0| 69 73 74 69 6e 67 75 69 | 73 68 20 62 65 74 77 65 |istingui|sh betwe|
|00001400| 65 6e 20 72 65 6c 65 61 | 73 69 6e 67 20 74 68 65 |en relea|sing the|
|00001410| 0d 5c 20 63 75 72 72 65 | 6e 74 20 6f 62 6a 65 63 |.\ curre|nt objec|
|00001420| 74 20 61 6e 64 20 72 65 | 6c 65 61 73 69 6e 67 20 |t and re|leasing |
|00001430| 74 68 65 20 77 68 6f 6c | 65 20 6c 6f 74 2e 20 20 |the whol|e lot. |
|00001440| 52 65 6c 65 61 73 65 3a | 20 69 73 20 6f 66 20 63 |Release:| is of c|
|00001450| 6f 75 72 73 65 0d 5c 20 | 6f 76 65 72 72 69 64 64 |ourse.\ |overridd|
|00001460| 65 6e 20 69 6e 20 74 68 | 6f 73 65 20 74 77 6f 20 |en in th|ose two |
|00001470| 63 6c 61 73 73 65 73 20 | 74 6f 20 72 65 6c 65 61 |classes |to relea|
|00001480| 73 65 20 74 68 65 20 65 | 6e 74 69 72 65 20 73 74 |se the e|ntire st|
|00001490| 72 75 63 74 75 72 65 2e | 0d 0d 3a 6d 20 52 45 4c |ructure.|..:m REL|
|000014a0| 45 41 53 45 4f 42 4a 3a | 0d 09 6e 69 6c 3f 3a 20 |EASEOBJ:|..nil?: |
|000014b0| 73 65 6c 66 20 20 3f 45 | 58 49 54 0d 09 6f 62 6a |self ?E|XIT..obj|
|000014c0| 3a 20 73 65 6c 66 20 20 | 72 65 6c 65 61 73 65 3a |: self |release:|
|000014d0| 20 5b 5d 20 20 72 65 6c | 65 61 73 65 3a 20 73 75 | [] rel|ease: su|
|000014e0| 70 65 72 20 20 3b 6d 0d | 0d 3a 6d 20 52 45 4c 45 |per ;m.|.:m RELE|
|000014f0| 41 53 45 3a 09 72 65 6c | 65 61 73 65 4f 62 6a 3a |ASE:.rel|easeObj:|
|00001500| 20 73 65 6c 66 20 20 3b | 6d 09 09 5c 20 53 74 61 | self ;|m..\ Sta|
|00001510| 6e 64 61 72 64 20 64 65 | 73 74 72 75 63 74 6f 72 |ndard de|structor|
|00001520| 20 6e 61 6d 65 2e 0d 0d | 0d 28 2a 09 46 6f 72 20 | name...|.(*.For |
|00001530| 53 45 4e 44 3a 20 61 6e | 64 20 42 52 49 4e 47 3a |SEND: an|d BRING:|
|00001540| 2c 20 77 65 20 63 6f 75 | 6c 64 20 6a 75 73 74 20 |, we cou|ld just |
|00001550| 69 6e 68 65 72 69 74 20 | 66 72 6f 6d 20 48 61 6e |inherit |from Han|
|00001560| 64 6c 65 2c 20 77 68 69 | 63 68 20 77 6f 75 6c 64 |dle, whi|ch would|
|00001570| 0d 09 6d 65 61 6e 20 6f | 75 72 20 6f 62 6a 65 63 |..mean o|ur objec|
|00001580| 74 20 67 65 74 73 20 73 | 61 76 65 64 20 61 73 20 |t gets s|aved as |
|00001590| 61 6e 20 75 6e 64 69 66 | 66 65 72 65 6e 74 69 61 |an undif|ferentia|
|000015a0| 74 65 64 20 73 74 72 69 | 6e 67 20 6f 66 20 62 79 |ted stri|ng of by|
|000015b0| 74 65 73 2e 20 20 54 68 | 69 73 0d 09 77 6f 75 6c |tes. Th|is..woul|
|000015c0| 64 6e 27 74 20 62 65 20 | 67 6f 6f 64 2c 20 73 69 |dn't be |good, si|
|000015d0| 6e 63 65 20 77 65 20 68 | 61 76 65 20 74 6f 20 61 |nce we h|ave to a|
|000015e0| 73 73 75 6d 65 20 74 68 | 61 74 20 74 68 65 20 6f |ssume th|at the o|
|000015f0| 62 6a 65 63 74 20 6b 6e | 6f 77 73 20 68 6f 77 0d |bject kn|ows how.|
|00001600| 09 74 6f 20 73 65 6e 64 | 20 69 74 73 65 6c 66 20 |.to send| itself |
|00001610| 70 72 6f 70 65 72 6c 79 | 2e 20 20 53 6f 20 77 65 |properly|. So we|
|00001620| 20 73 65 6e 64 20 74 68 | 65 20 6e 61 6d 65 20 6f | send th|e name o|
|00001630| 66 20 74 68 65 20 63 6c | 61 73 73 20 61 73 20 63 |f the cl|ass as c|
|00001640| 68 61 72 61 63 74 65 72 | 73 2c 20 0d 09 74 68 65 |haracter|s, ..the|
|00001650| 6e 20 73 65 6e 64 20 53 | 45 4e 44 3a 20 74 6f 20 |n send S|END: to |
|00001660| 74 68 65 20 6f 62 6a 65 | 63 74 20 69 74 73 65 6c |the obje|ct itsel|
|00001670| 66 2e 20 20 41 74 20 42 | 52 49 4e 47 3a 20 74 69 |f. At B|RING: ti|
|00001680| 6d 65 2c 20 77 65 20 6c | 6f 6f 6b 20 75 70 20 74 |me, we l|ook up t|
|00001690| 68 65 0d 09 63 6c 61 73 | 73 6e 61 6d 65 2c 20 63 |he..clas|sname, c|
|000016a0| 72 65 61 74 65 20 61 20 | 6e 65 77 20 6f 62 6a 65 |reate a |new obje|
|000016b0| 63 74 2c 20 74 68 65 6e | 20 73 65 6e 64 20 42 52 |ct, then| send BR|
|000016c0| 49 4e 47 3a 20 74 6f 20 | 69 74 2e 0d 09 41 20 6e |ING: to |it...A n|
|000016d0| 69 63 65 20 74 68 69 6e | 67 20 61 62 6f 75 74 20 |ice thin|g about |
|000016e0| 74 68 69 73 20 73 63 68 | 65 6d 65 20 69 73 20 74 |this sch|eme is t|
|000016f0| 68 61 74 20 69 66 20 74 | 68 65 20 6f 62 6a 65 63 |hat if t|he objec|
|00001700| 74 20 64 6f 65 73 6e 27 | 74 20 63 6f 6e 74 61 69 |t doesn'|t contai|
|00001710| 6e 0d 09 61 6e 79 20 61 | 64 64 72 65 73 73 65 73 |n..any a|ddresses|
|00001720| 2c 20 69 74 20 63 61 6e | 20 62 65 20 72 65 63 6f |, it can| be reco|
|00001730| 6e 73 74 69 74 75 74 65 | 64 20 61 66 74 65 72 20 |nstitute|d after |
|00001740| 61 20 4d 6f 70 73 20 72 | 65 63 6f 6d 70 69 6c 61 |a Mops r|ecompila|
|00001750| 74 69 6f 6e 2c 20 61 6e | 64 0d 09 6f 66 74 65 6e |tion, an|d..often|
|00001760| 20 65 76 65 6e 20 6f 76 | 65 72 20 61 20 70 6c 61 | even ov|er a pla|
|00001770| 74 66 6f 72 6d 20 63 68 | 61 6e 67 65 2e 0d 2a 29 |tform ch|ange..*)|
|00001780| 0d 0d 3a 6d 20 53 45 4e | 44 3a 20 20 7b 20 73 74 |..:m SEN|D: { st|
|00001790| 72 65 61 6d 20 5c 20 6e | 69 6c 3f 20 5e 6f 62 6a |ream \ n|il? ^obj|
|000017a0| 20 6c 65 6e 20 2d 2d 20 | 7d 0d 0d 5c 20 66 69 72 | len -- |}..\ fir|
|000017b0| 73 74 20 77 65 20 73 65 | 6e 64 20 61 20 32 2d 62 |st we se|nd a 2-b|
|000017c0| 79 74 65 20 63 6f 64 65 | 2e 20 20 54 68 69 73 20 |yte code|. This |
|000017d0| 69 73 20 2d 32 20 69 66 | 20 74 68 65 72 65 27 73 |is -2 if| there's|
|000017e0| 20 6e 6f 20 6f 62 6a 65 | 63 74 20 28 74 68 65 0d | no obje|ct (the.|
|000017f0| 5c 20 20 68 61 6e 64 6c | 65 20 69 73 20 6e 69 6c |\ handl|e is nil|
|00001800| 29 2e 20 20 4f 74 68 65 | 72 77 69 73 65 20 69 74 |). Othe|rwise it|
|00001810| 27 73 20 74 68 65 20 6e | 75 6d 62 65 72 20 6f 66 |'s the n|umber of|
|00001820| 20 69 6e 64 65 78 65 64 | 20 65 6c 65 6d 65 6e 74 | indexed| element|
|00001830| 73 20 69 6e 0d 5c 20 20 | 74 68 65 20 6f 62 6a 65 |s in.\ |the obje|
|00001840| 63 74 2c 20 6f 72 20 2d | 31 20 69 66 20 69 74 20 |ct, or -|1 if it |
|00001850| 69 73 6e 27 74 20 69 6e | 64 65 78 65 64 2e 0d 0d |isn't in|dexed...|
|00001860| 09 6e 69 6c 3f 3a 20 73 | 65 6c 66 20 20 64 75 70 |.nil?: s|elf dup|
|00001870| 20 2d 3e 20 6e 69 6c 3f | 0d 09 49 46 09 09 2d 31 | -> nil?|..IF..-1|
|00001880| 0d 09 45 4c 53 45 09 6f | 62 6a 3a 20 73 65 6c 66 |..ELSE.o|bj: self|
|00001890| 20 20 2d 3e 20 5e 6f 62 | 6a 0d 09 09 09 23 65 6c | -> ^ob|j....#el|
|000018a0| 65 6d 65 6e 74 73 3a 20 | 5b 20 5e 6f 62 6a 20 5d |ements: |[ ^obj ]|
|000018b0| 0d 09 54 48 45 4e 0d 09 | 70 61 64 20 77 21 20 20 |..THEN..|pad w! |
|000018c0| 70 61 64 20 32 20 77 72 | 69 74 65 3a 20 5b 20 73 |pad 2 wr|ite: [ s|
|000018d0| 74 72 65 61 6d 20 5d 20 | 20 4f 4b 3f 0d 09 0d 09 |tream ] | OK?....|
|000018e0| 6e 69 6c 3f 20 20 3f 45 | 58 49 54 09 09 09 09 5c |nil? ?E|XIT....\|
|000018f0| 20 66 6f 72 20 6e 6f 6e | 65 78 69 73 74 65 6e 74 | for non|existent|
|00001900| 20 6f 62 6a 65 63 74 73 | 2c 20 74 68 61 74 27 73 | objects|, that's|
|00001910| 20 61 6c 6c 20 77 65 20 | 73 65 6e 64 0d 0d 09 63 | all we |send...c|
|00001920| 6c 61 73 73 3a 20 5b 20 | 5e 6f 62 6a 20 5d 20 20 |lass: [ |^obj ] |
|00001930| 3e 6e 61 6d 65 20 6e 3e | 63 6f 75 6e 74 20 20 64 |>name n>|count d|
|00001940| 75 70 20 2d 3e 20 6c 65 | 6e 0d 09 70 61 64 20 70 |up -> le|n..pad p|
|00001950| 6c 61 63 65 0d 09 70 61 | 64 20 20 6c 65 6e 20 31 |lace..pa|d len 1|
|00001960| 2b 20 20 77 72 69 74 65 | 3a 20 5b 20 73 74 72 65 |+ write|: [ stre|
|00001970| 61 6d 20 5d 20 20 4f 4b | 3f 09 09 5c 20 73 65 6e |am ] OK|?..\ sen|
|00001980| 64 20 63 6f 75 6e 74 65 | 64 20 63 6c 61 73 73 6e |d counte|d classn|
|00001990| 61 6d 65 0d 09 73 74 72 | 65 61 6d 20 20 73 65 6e |ame..str|eam sen|
|000019a0| 64 3a 20 5b 20 5e 6f 62 | 6a 20 5d 09 09 09 09 09 |d: [ ^ob|j ].....|
|000019b0| 5c 20 74 68 65 6e 20 77 | 68 61 74 65 76 65 72 20 |\ then w|hatever |
|000019c0| 74 68 65 20 6f 62 6a 65 | 63 74 20 69 74 73 65 6c |the obje|ct itsel|
|000019d0| 66 0d 09 09 09 09 09 09 | 09 09 09 09 09 5c 20 20 |f.......|.....\ |
|000019e0| 77 61 6e 74 73 20 74 6f | 20 61 64 64 0d 3b 6d 0d |wants to| add.;m.|
|000019f0| 0d 3a 6d 20 42 52 49 4e | 47 3a 20 20 7b 20 73 74 |.:m BRIN|G: { st|
|00001a00| 72 65 61 6d 20 5c 20 6c | 65 6e 20 23 65 6c 65 6d |ream \ l|en #elem|
|00001a10| 65 6e 74 73 20 5e 6f 62 | 6a 20 2d 2d 20 7d 0d 09 |ents ^ob|j -- }..|
|00001a20| 72 65 6c 65 61 73 65 3a | 20 73 65 6c 66 09 09 09 |release:| self...|
|00001a30| 09 09 09 5c 20 77 65 27 | 72 65 20 67 6f 69 6e 67 |...\ we'|re going|
|00001a40| 20 74 6f 20 77 69 70 65 | 20 6f 75 74 20 77 68 61 | to wipe| out wha|
|00001a50| 74 65 76 65 72 27 73 0d | 09 09 09 09 09 09 09 09 |tever's.|........|
|00001a60| 09 09 5c 20 20 74 68 65 | 72 65 20 61 6c 72 65 61 |..\ the|re alrea|
|00001a70| 64 79 0d 09 70 61 64 20 | 32 20 72 65 61 64 3a 20 |dy..pad |2 read: |
|00001a80| 5b 20 73 74 72 65 61 6d | 20 5d 20 20 4f 4b 3f 0d |[ stream| ] OK?.|
|00001a90| 09 70 61 64 20 77 40 78 | 20 20 2d 3e 20 23 65 6c |.pad w@x| -> #el|
|00001aa0| 65 6d 65 6e 74 73 09 09 | 09 09 5c 20 77 69 6c 6c |ements..|..\ will|
|00001ab0| 20 62 65 20 2d 31 20 69 | 66 20 6e 6f 74 20 69 6e | be -1 i|f not in|
|00001ac0| 64 65 78 65 64 2c 0d 09 | 09 09 09 09 09 09 09 09 |dexed,..|........|
|00001ad0| 09 5c 20 20 6f 72 20 2d | 32 20 69 66 20 6e 6f 20 |.\ or -|2 if no |
|00001ae0| 6f 62 6a 65 63 74 20 61 | 74 20 61 6c 6c 0d 09 23 |object a|t all..#|
|00001af0| 65 6c 65 6d 65 6e 74 73 | 20 2d 32 20 3d 20 20 3f |elements| -2 = ?|
|00001b00| 45 58 49 54 09 09 09 09 | 5c 20 69 6e 20 6c 61 74 |EXIT....|\ in lat|
|00001b10| 74 65 72 20 63 61 73 65 | 2c 20 77 65 20 73 74 61 |ter case|, we sta|
|00001b20| 79 20 6e 69 6c 0d 0d 09 | 70 61 64 20 31 20 20 72 |y nil...|pad 1 r|
|00001b30| 65 61 64 3a 20 5b 20 73 | 74 72 65 61 6d 20 5d 20 |ead: [ s|tream ] |
|00001b40| 20 4f 4b 3f 0d 09 70 61 | 64 20 63 40 20 20 2d 3e | OK?..pa|d c@ ->|
|00001b50| 20 6c 65 6e 0d 09 70 61 | 64 20 35 30 20 2b 20 6c | len..pa|d 50 + l|
|00001b60| 65 6e 20 20 72 65 61 64 | 3a 20 5b 20 73 74 72 65 |en read|: [ stre|
|00001b70| 61 6d 20 5d 20 4f 4b 3f | 09 5c 20 73 46 69 6e 64 |am ] OK?|.\ sFind|
|00001b80| 20 75 73 65 73 20 70 61 | 64 2c 20 73 6f 20 77 65 | uses pa|d, so we|
|00001b90| 20 70 75 74 0d 09 09 09 | 09 09 09 09 09 09 09 5c | put....|.......\|
|00001ba0| 20 20 74 68 65 20 6e 61 | 6d 65 20 61 20 62 69 74 | the na|me a bit|
|00001bb0| 20 68 69 67 68 65 72 0d | 09 23 65 6c 65 6d 65 6e | higher.|.#elemen|
|00001bc0| 74 73 20 30 3e 20 49 46 | 20 20 23 65 6c 65 6d 65 |ts 0> IF| #eleme|
|00001bd0| 6e 74 73 20 20 54 48 45 | 4e 0d 09 70 61 64 20 35 |nts THE|N..pad 5|
|00001be0| 30 20 2b 20 6c 65 6e 20 | 20 73 46 69 6e 64 20 4e |0 + len | sFind N|
|00001bf0| 49 46 20 20 2e 22 20 61 | 61 75 75 67 67 67 68 68 |IF ." a|auuggghh|
|00001c00| 68 22 20 71 75 69 74 20 | 20 54 48 45 4e 0d 0d 5c |h" quit | THEN..\|
|00001c10| 20 28 23 65 6c 73 29 20 | 5e 63 6c 61 73 73 0d 09 | (#els) |^class..|
|00001c20| 6e 65 77 4f 62 6a 3a 20 | 73 65 6c 66 0d 09 73 74 |newObj: |self..st|
|00001c30| 72 65 61 6d 20 20 6f 62 | 6a 3a 20 73 65 6c 66 20 |ream ob|j: self |
|00001c40| 20 62 72 69 6e 67 3a 20 | 5b 5d 0d 3b 6d 0d 0d 0d | bring: |[].;m...|
|00001c50| 3a 6d 20 50 52 49 4e 54 | 3a 0d 09 70 72 69 6e 74 |:m PRINT|:..print|
|00001c60| 3a 20 73 75 70 65 72 20 | 20 34 20 73 70 61 63 65 |: super | 4 space|
|00001c70| 73 20 20 2e 22 20 6f 62 | 6a 65 63 74 3a 20 22 0d |s ." ob|ject: ".|
|00001c80| 09 6e 69 6c 3f 3a 20 73 | 65 6c 66 0d 09 69 66 09 |.nil?: s|elf..if.|
|00001c90| 2e 22 20 28 6e 6f 6e 65 | 29 22 0d 09 65 6c 73 65 |." (none|)"..else|
|00001ca0| 09 70 72 69 6e 74 3a 20 | 5b 20 6f 62 6a 3a 20 73 |.print: |[ obj: s|
|00001cb0| 65 6c 66 20 5d 20 20 75 | 6e 6c 6f 63 6b 3a 20 73 |elf ] u|nlock: s|
|00001cc0| 65 6c 66 0d 09 74 68 65 | 6e 20 20 20 3b 6d 0d 0d |elf..the|n ;m..|
|00001cd0| 3a 6d 20 44 55 4d 50 3a | 0d 09 64 75 6d 70 3a 20 |:m DUMP:|..dump: |
|00001ce0| 73 75 70 65 72 20 20 63 | 72 0d 09 2e 22 20 6f 62 |super c|r..." ob|
|00001cf0| 6a 65 63 74 3a 20 22 0d | 09 6e 69 6c 3f 3a 20 73 |ject: ".|.nil?: s|
|00001d00| 65 6c 66 0d 09 69 66 09 | 2e 22 20 28 6e 6f 6e 65 |elf..if.|." (none|
|00001d10| 29 22 0d 09 65 6c 73 65 | 09 64 75 6d 70 3a 20 5b |)"..else|.dump: [|
|00001d20| 20 6f 62 6a 3a 20 73 65 | 6c 66 20 5d 20 20 75 6e | obj: se|lf ] un|
|00001d30| 6c 6f 63 6b 3a 20 73 65 | 6c 66 0d 09 74 68 65 6e |lock: se|lf..then|
|00001d40| 20 20 20 3b 6d 0d 0d 3b | 63 6c 61 73 73 0d 0d 3a | ;m..;|class..:|
|00001d50| 63 6c 61 73 73 09 50 54 | 52 09 20 73 75 70 65 72 |class.PT|R. super|
|00001d60| 7b 20 6c 6f 6e 67 77 6f | 72 64 20 7d 0d 0d 3a 6d |{ longwo|rd }..:m|
|00001d70| 20 52 45 4c 45 41 53 45 | 3a 09 09 5c 20 44 65 61 | RELEASE|:..\ Dea|
|00001d80| 6c 6c 6f 63 61 74 65 73 | 20 74 68 65 20 68 65 61 |llocates| the hea|
|00001d90| 70 20 62 6c 6f 63 6b 2c | 20 69 66 20 61 6c 6c 6f |p block,| if allo|
|00001da0| 63 61 74 65 64 2e 0d 09 | 6b 69 6c 6c 50 20 20 3b |cated...|killP ;|
|00001db0| 6d 0d 0d 3a 6d 20 4e 45 | 57 3a 20 20 20 28 20 6c |m..:m NE|W: ( l|
|00001dc0| 65 6e 20 2d 2d 20 29 09 | 6e 65 77 50 20 20 30 3d |en -- ).|newP 0=|
|00001dd0| 20 3f 65 72 72 6f 72 20 | 31 32 31 20 20 3b 6d 0d | ?error |121 ;m.|
|00001de0| 0d 3a 6d 20 4e 49 4c 3f | 3a 20 20 20 28 20 2d 2d |.:m NIL?|: ( --|
|00001df0| 20 62 20 29 09 09 5e 62 | 61 73 65 20 40 20 20 6e | b )..^b|ase @ n|
|00001e00| 69 6c 50 20 3d 20 20 3b | 6d 0d 0d 3a 6d 20 43 4c |ilP = ;|m..:m CL|
|00001e10| 45 41 52 3a 09 6e 69 6c | 50 20 20 5e 62 61 73 65 |EAR:.nil|P ^base|
|00001e20| 20 21 20 20 3b 6d 09 09 | 5c 20 57 65 20 68 6f 70 | ! ;m..|\ We hop|
|00001e30| 65 20 77 65 20 6b 6e 6f | 77 20 77 68 61 74 20 77 |e we kno|w what w|
|00001e40| 65 27 72 65 20 64 6f 69 | 6e 67 2e 0d 0d 3a 6d 20 |e're doi|ng...:m |
|00001e50| 43 4c 41 53 53 49 4e 49 | 54 3a 09 63 6c 65 61 72 |CLASSINI|T:.clear|
|00001e60| 3a 20 73 65 6c 66 20 20 | 3b 6d 09 09 5c 20 49 6e |: self |;m..\ In|
|00001e70| 69 74 69 61 6c 6c 79 20 | 6e 69 6c 0d 0d 3b 63 6c |itially |nil..;cl|
|00001e80| 61 73 73 0d 0d 0d 5c 20 | 44 49 43 41 44 44 52 20 |ass...\ |DICADDR |
|00001e90| 69 73 20 61 20 72 65 6c | 6f 63 61 74 61 62 6c 65 |is a rel|ocatable|
|00001ea0| 20 64 69 63 74 69 6f 6e | 61 72 79 20 61 64 64 72 | diction|ary addr|
|00001eb0| 65 73 73 20 63 6c 61 73 | 73 20 2d 20 75 73 65 20 |ess clas|s - use |
|00001ec0| 74 6f 20 73 74 6f 72 65 | 0d 5c 20 6e 6f 6e 2d 65 |to store|.\ non-e|
|00001ed0| 78 65 63 75 74 61 62 6c | 65 20 64 69 63 74 69 6f |xecutabl|e dictio|
|00001ee0| 6e 61 72 79 20 61 64 64 | 72 65 73 73 65 73 2e 0d |nary add|resses..|
|00001ef0| 0d 3a 63 6c 61 73 73 20 | 09 44 49 43 41 44 44 52 |.:class |.DICADDR|
|00001f00| 20 20 73 75 70 65 72 7b | 20 6c 6f 6e 67 77 6f 72 | super{| longwor|
|00001f10| 64 20 7d 0d 0d 3a 6d 20 | 47 45 54 3a 09 09 5e 62 |d }..:m |GET:..^b|
|00001f20| 61 73 65 20 20 40 61 62 | 73 09 3b 6d 0d 3a 6d 20 |ase @ab|s.;m.:m |
|00001f30| 50 55 54 3a 09 09 5e 62 | 61 73 65 20 20 72 65 6c |PUT:..^b|ase rel|
|00001f40| 6f 63 21 09 3b 6d 0d 0d | 3a 6d 20 50 52 49 4e 54 |oc!.;m..|:m PRINT|
|00001f50| 3a 09 67 65 74 3a 20 73 | 65 6c 66 20 20 2e 69 64 |:.get: s|elf .id|
|00001f60| 20 20 3b 6d 0d 0d 3a 6d | 20 43 4c 41 53 53 49 4e | ;m..:m| CLASSIN|
|00001f70| 49 54 3a 09 5b 27 5d 20 | 6e 75 6c 6c 20 20 70 75 |IT:.['] |null pu|
|00001f80| 74 3a 20 73 65 6c 66 20 | 20 3b 6d 0d 0d 3b 63 6c |t: self | ;m..;cl|
|00001f90| 61 73 73 0d 0d 0d 5c 20 | 58 2d 41 44 44 52 20 69 |ass...\ |X-ADDR i|
|00001fa0| 73 20 61 6e 20 65 78 65 | 63 75 74 61 62 6c 65 20 |s an exe|cutable |
|00001fb0| 64 69 63 74 69 6f 6e 61 | 72 79 20 61 64 64 72 65 |dictiona|ry addre|
|00001fc0| 73 73 20 63 6c 61 73 73 | 2e 20 20 54 68 65 20 6f |ss class|. The o|
|00001fd0| 6e 6c 79 20 73 69 67 6e | 69 66 69 63 61 6e 74 0d |nly sign|ificant.|
|00001fe0| 5c 20 64 69 66 66 65 72 | 65 6e 63 65 20 74 6f 20 |\ differ|ence to |
|00001ff0| 44 69 63 41 64 64 72 20 | 69 73 20 74 68 61 74 20 |DicAddr |is that |
|00002000| 74 68 65 72 65 20 69 73 | 20 61 6e 20 45 78 65 63 |there is| an Exec|
|00002010| 3a 20 6d 65 74 68 6f 64 | 2e 0d 5c 20 42 75 74 20 |: method|..\ But |
|00002020| 69 66 20 77 65 20 65 76 | 65 72 20 68 61 76 65 20 |if we ev|er have |
|00002030| 74 6f 20 73 65 70 61 72 | 61 74 65 20 63 6f 64 65 |to separ|ate code|
|00002040| 20 61 6e 64 20 64 61 74 | 61 2c 20 68 61 76 69 6e | and dat|a, havin|
|00002050| 67 20 61 20 73 65 70 61 | 72 61 74 65 20 63 6c 61 |g a sepa|rate cla|
|00002060| 73 73 0d 5c 20 63 6f 75 | 6c 64 20 70 72 6f 76 65 |ss.\ cou|ld prove|
|00002070| 20 76 65 72 79 20 75 73 | 65 66 75 6c 2e 20 20 41 | very us|eful. A|
|00002080| 6e 20 78 2d 61 64 64 72 | 20 69 73 20 74 68 65 20 |n x-addr| is the |
|00002090| 73 61 6d 65 20 61 73 20 | 61 20 4d 6f 70 73 20 65 |same as |a Mops e|
|000020a0| 78 65 63 75 74 69 6f 6e | 20 74 6f 6b 65 6e 2e 0d |xecution| token..|
|000020b0| 0d 3a 63 6c 61 73 73 09 | 58 2d 41 44 44 52 09 73 |.:class.|X-ADDR.s|
|000020c0| 75 70 65 72 7b 20 6f 62 | 6a 65 63 74 20 7d 0d 0d |uper{ ob|ject }..|
|000020d0| 20 20 20 20 34 09 62 79 | 74 65 73 09 64 61 74 61 | 4.by|tes.data|
|000020e0| 0d 0d 3a 6d 20 45 58 45 | 43 3a 09 69 6e 6c 69 6e |..:m EXE|C:.inlin|
|000020f0| 65 7b 20 6f 62 6a 20 65 | 78 7d 09 5e 62 61 73 65 |e{ obj e|x}.^base|
|00002100| 20 40 61 62 73 20 20 65 | 78 65 63 75 74 65 20 20 | @abs e|xecute |
|00002110| 3b 6d 0d 0d 3a 6d 20 47 | 45 54 3a 09 09 5e 62 61 |;m..:m G|ET:..^ba|
|00002120| 73 65 20 20 40 61 62 73 | 09 3b 6d 0d 3a 6d 20 50 |se @abs|.;m.:m P|
|00002130| 55 54 3a 09 09 5e 62 61 | 73 65 20 20 72 65 6c 6f |UT:..^ba|se relo|
|00002140| 63 21 20 20 20 3b 6d 0d | 0d 3a 6d 20 43 4c 41 53 |c! ;m.|.:m CLAS|
|00002150| 53 49 4e 49 54 3a 09 5b | 27 5d 20 6e 75 6c 6c 20 |SINIT:.[|'] null |
|00002160| 20 70 75 74 3a 20 73 65 | 6c 66 20 20 3b 6d 0d 0d | put: se|lf ;m..|
|00002170| 3b 63 6c 61 73 73 0d 0d | 0d 5c 09 09 3d 3d 3d 3d |;class..|.\..====|
|00002180| 3d 3d 3d 3d 3d 3d 3d 3d | 3d 20 41 72 72 61 79 73 |========|= Arrays|
|00002190| 20 3d 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d | =======|========|
|000021a0| 0d 0d 3a 20 3f 23 58 54 | 53 09 5c 20 28 20 6e 31 |..: ?#XT|S.\ ( n1|
|000021b0| 20 6e 32 20 2d 2d 20 29 | 20 20 55 73 65 64 20 74 | n2 -- )| Used t|
|000021c0| 6f 20 63 68 65 63 6b 20 | 74 68 61 74 20 74 68 65 |o check |that the|
|000021d0| 20 72 69 67 68 74 0d 09 | 09 5c 20 6e 75 6d 62 65 | right..|.\ numbe|
|000021e0| 72 20 6f 66 20 73 74 61 | 63 6b 65 64 20 63 66 61 |r of sta|cked cfa|
|000021f0| 73 20 69 73 20 62 65 69 | 6e 67 20 70 61 73 73 65 |s is bei|ng passe|
|00002200| 64 20 69 6e 2e 0d 09 3c | 3e 20 20 3f 65 72 72 6f |d in...<|> ?erro|
|00002210| 72 20 31 37 31 20 20 3b | 09 5c 20 22 57 72 6f 6e |r 171 ;|.\ "Wron|
|00002220| 67 20 6e 75 6d 62 65 72 | 20 6f 66 20 63 66 61 73 |g number| of cfas|
|00002230| 22 0d 0d 0d 5c 20 43 6c | 61 73 73 20 49 4e 44 45 |"...\ Cl|ass INDE|
|00002240| 58 45 44 2d 4f 42 4a 20 | 69 73 20 74 68 65 20 67 |XED-OBJ |is the g|
|00002250| 65 6e 65 72 69 63 20 73 | 75 70 65 72 63 6c 61 73 |eneric s|uperclas|
|00002260| 73 20 66 6f 72 20 61 6c | 6c 20 61 72 72 61 79 73 |s for al|l arrays|
|00002270| 2e 20 20 48 65 72 65 20 | 77 65 20 64 65 66 69 6e |. Here |we defin|
|00002280| 65 0d 5c 20 74 68 65 20 | 67 65 6e 65 72 61 6c 20 |e.\ the |general |
|00002290| 69 6e 64 65 78 65 64 20 | 6d 65 74 68 6f 64 73 2c |indexed |methods,|
|000022a0| 20 77 68 69 63 68 20 61 | 70 70 6c 79 20 72 65 67 | which a|pply reg|
|000022b0| 61 72 64 6c 65 73 73 20 | 6f 66 20 69 6e 64 65 78 |ardless |of index|
|000022c0| 65 64 20 77 69 64 74 68 | 2e 0d 0d 3a 63 6c 61 73 |ed width|...:clas|
|000022d0| 73 09 49 4e 44 45 58 45 | 44 2d 4f 42 4a 20 20 73 |s.INDEXE|D-OBJ s|
|000022e0| 75 70 65 72 7b 20 6f 62 | 6a 65 63 74 20 7d 0d 0d |uper{ ob|ject }..|
|000022f0| 3a 6d 20 5e 45 4c 45 4d | 3a 09 5e 65 6c 65 6d 20 |:m ^ELEM|:.^elem |
|00002300| 20 3b 6d 0d 0d 3a 6d 20 | 4c 49 4d 49 54 3a 09 6c | ;m..:m |LIMIT:.l|
|00002310| 69 6d 69 74 20 20 3b 6d | 0d 0d 3a 6d 20 57 49 44 |imit ;m|..:m WID|
|00002320| 54 48 3a 09 69 64 78 62 | 61 73 65 20 20 36 20 2d |TH:.idxb|ase 6 -|
|00002330| 20 20 77 40 20 20 3b 6d | 0d 0d 3a 6d 20 49 58 41 | w@ ;m|..:m IXA|
|00002340| 44 44 52 3a 09 69 64 78 | 62 61 73 65 20 20 3b 6d |DDR:.idx|base ;m|
|00002350| 0d 0d 3a 6d 20 43 4c 45 | 41 52 58 3a 09 5c 20 45 |..:m CLE|ARX:.\ E|
|00002360| 72 61 73 65 73 20 69 6e | 64 65 78 65 64 20 61 72 |rases in|dexed ar|
|00002370| 65 61 2e 0d 09 69 64 78 | 62 61 73 65 20 20 6c 69 |ea...idx|base li|
|00002380| 6d 69 74 20 20 77 69 64 | 74 68 3a 20 73 65 6c 66 |mit wid|th: self|
|00002390| 20 20 2a 20 20 65 72 61 | 73 65 20 20 3b 6d 0d 0d | * era|se ;m..|
|000023a0| 3a 6d 20 43 4c 41 53 53 | 49 4e 49 54 3a 09 63 6c |:m CLASS|INIT:.cl|
|000023b0| 65 61 72 58 3a 20 73 65 | 6c 66 20 20 3b 6d 0d 0d |earX: se|lf ;m..|
|000023c0| 3b 63 6c 61 73 73 0d 0d | 0d 5c 20 41 52 52 41 59 |;class..|.\ ARRAY|
|000023d0| 20 69 73 20 74 68 65 20 | 62 61 73 69 63 20 34 2d | is the |basic 4-|
|000023e0| 62 79 74 65 20 63 65 6c | 6c 20 61 72 72 61 79 2e |byte cel|l array.|
|000023f0| 0d 0d 3a 63 6c 61 73 73 | 09 41 52 52 41 59 20 20 |..:class|.ARRAY |
|00002400| 73 75 70 65 72 7b 20 69 | 6e 64 65 78 65 64 2d 6f |super{ i|ndexed-o|
|00002410| 62 6a 20 7d 20 20 34 20 | 69 6e 64 65 78 65 64 0d |bj } 4 |indexed.|
|00002420| 0d 3a 6d 20 41 54 3a 20 | 20 28 20 69 6e 64 65 78 |.:m AT: | ( index|
|00002430| 20 2d 2d 20 6e 20 29 09 | 09 69 6e 6c 69 6e 65 7b | -- n ).|.inline{|
|00002440| 20 69 78 20 40 7d 09 5e | 65 6c 65 6d 34 20 20 40 | ix @}.^|elem4 @|
|00002450| 09 3b 6d 0d 3a 6d 20 54 | 4f 3a 20 20 28 20 6e 20 |.;m.:m T|O: ( n |
|00002460| 69 6e 64 65 78 20 2d 2d | 20 29 09 09 69 6e 6c 69 |index --| )..inli|
|00002470| 6e 65 7b 20 69 78 20 21 | 7d 09 5e 65 6c 65 6d 34 |ne{ ix !|}.^elem4|
|00002480| 20 20 21 09 3b 6d 0d 3a | 6d 20 2b 54 4f 3a 20 20 | !.;m.:|m +TO: |
|00002490| 28 20 6e 20 69 6e 64 65 | 78 20 2d 2d 20 29 09 09 |( n inde|x -- )..|
|000024a0| 69 6e 6c 69 6e 65 7b 20 | 69 78 20 2b 21 7d 09 5e |inline{ |ix +!}.^|
|000024b0| 65 6c 65 6d 34 20 20 2b | 21 09 3b 6d 0d 3a 6d 20 |elem4 +|!.;m.:m |
|000024c0| 2d 54 4f 3a 20 20 28 20 | 6e 20 69 6e 64 65 78 20 |-TO: ( |n index |
|000024d0| 2d 2d 20 29 09 09 69 6e | 6c 69 6e 65 7b 20 69 78 |-- )..in|line{ ix|
|000024e0| 20 2d 21 7d 09 5e 65 6c | 65 6d 34 20 20 2d 21 09 | -!}.^el|em4 -!.|
|000024f0| 3b 6d 0d 3a 6d 20 5e 45 | 4c 45 4d 3a 20 20 28 20 |;m.:m ^E|LEM: ( |
|00002500| 69 64 78 20 2d 2d 20 61 | 64 64 72 20 29 09 69 6e |idx -- a|ddr ).in|
|00002510| 6c 69 6e 65 7b 20 69 78 | 7d 09 5e 65 6c 65 6d 34 |line{ ix|}.^elem4|
|00002520| 09 3b 6d 0d 0d 3a 6d 20 | 46 49 4c 4c 3a 09 09 5c |.;m..:m |FILL:..\|
|00002530| 20 28 20 76 61 6c 75 65 | 20 2d 2d 20 29 20 20 46 | ( value| -- ) F|
|00002540| 69 6c 6c 73 20 61 6c 6c | 20 65 6c 65 6d 65 6e 74 |ills all| element|
|00002550| 73 20 77 69 74 68 20 76 | 61 6c 75 65 2e 0d 09 69 |s with v|alue...i|
|00002560| 64 78 62 61 73 65 20 20 | 6c 69 6d 69 74 20 34 2a |dxbase |limit 4*|
|00002570| 20 20 62 6f 75 6e 64 73 | 0d 09 3f 64 6f 20 20 64 | bounds|..?do d|
|00002580| 75 70 20 20 69 20 21 20 | 20 34 20 2b 6c 6f 6f 70 |up i ! | 4 +loop|
|00002590| 20 20 64 72 6f 70 20 20 | 3b 6d 0d 0d 3a 6d 20 57 | drop |;m..:m W|
|000025a0| 49 44 54 48 3a 09 34 20 | 20 3b 6d 09 09 5c 20 46 |IDTH:.4 | ;m..\ F|
|000025b0| 61 73 74 65 72 20 74 68 | 61 6e 20 74 68 65 20 64 |aster th|an the d|
|000025c0| 65 66 61 75 6c 74 20 69 | 6e 20 49 6e 64 65 78 65 |efault i|n Indexe|
|000025d0| 64 2d 6f 62 6a 2e 0d 0d | 3a 6d 20 47 45 54 45 4c |d-obj...|:m GETEL|
|000025e0| 45 4d 3a 09 5c 20 28 20 | 61 64 64 72 20 2d 2d 20 |EM:.\ ( |addr -- |
|000025f0| 6e 20 29 20 20 46 65 74 | 63 68 65 73 20 6f 6e 65 |n ) Fet|ches one|
|00002600| 20 65 6c 65 6d 65 6e 74 | 20 61 74 20 61 64 64 72 | element| at addr|
|00002610| 20 2d 20 73 61 76 65 73 | 20 69 6e 64 65 78 69 6e | - saves| indexin|
|00002620| 67 0d 09 09 5c 09 09 73 | 74 65 70 20 69 66 20 61 |g...\..s|tep if a|
|00002630| 64 64 72 20 69 73 20 6b | 6e 6f 77 6e 2e 0d 09 40 |ddr is k|nown...@|
|00002640| 20 20 3b 6d 0d 0d 3a 6d | 20 50 52 49 4e 54 3a 0d | ;m..:m| PRINT:.|
|00002650| 09 6c 69 6d 69 74 20 30 | 0d 09 3f 44 4f 0d 09 09 |.limit 0|..?DO...|
|00002660| 69 20 64 75 70 20 2e 20 | 20 33 20 73 70 61 63 65 |i dup . | 3 space|
|00002670| 73 20 20 61 74 3a 20 73 | 65 6c 66 20 20 2e 20 20 |s at: s|elf . |
|00002680| 63 72 0d 09 4c 4f 4f 50 | 0d 3b 6d 0d 0d 3b 63 6c |cr..LOOP|.;m..;cl|
|00002690| 61 73 73 0d 0d 0d 5c 20 | 58 2d 41 52 52 41 59 20 |ass...\ |X-ARRAY |
|000026a0| 63 61 6e 20 65 78 65 63 | 75 74 65 20 69 74 73 20 |can exec|ute its |
|000026b0| 65 6c 65 6d 65 6e 74 73 | 2e 0d 0d 3a 63 6c 61 73 |elements|...:clas|
|000026c0| 73 09 58 2d 41 52 52 41 | 59 20 20 73 75 70 65 72 |s.X-ARRA|Y super|
|000026d0| 7b 20 61 72 72 61 79 20 | 7d 0d 0d 3a 6d 20 54 4f |{ array |}..:m TO|
|000026e0| 3a 20 20 28 20 69 6e 64 | 65 78 20 2d 2d 20 29 09 |: ( ind|ex -- ).|
|000026f0| 5e 65 6c 65 6d 3a 20 73 | 75 70 65 72 20 20 72 65 |^elem: s|uper re|
|00002700| 6c 6f 63 21 20 20 3b 6d | 0d 0d 3a 6d 20 45 58 45 |loc! ;m|..:m EXE|
|00002710| 43 3a 20 20 28 20 69 6e | 64 65 78 20 2d 2d 20 29 |C: ( in|dex -- )|
|00002720| 0d 09 69 6e 6c 69 6e 65 | 7b 20 69 78 20 65 78 7d |..inline|{ ix ex}|
|00002730| 09 5e 65 6c 65 6d 3a 20 | 73 65 6c 66 20 20 40 61 |.^elem: |self @a|
|00002740| 62 73 20 20 65 78 65 63 | 75 74 65 20 20 3b 6d 0d |bs exec|ute ;m.|
|00002750| 0d 3a 6d 20 46 49 4c 4c | 3a 09 09 5c 20 28 20 78 |.:m FILL|:..\ ( x|
|00002760| 74 20 2d 2d 20 29 0d 09 | 6c 69 6d 69 74 20 6e 69 |t -- )..|limit ni|
|00002770| 66 20 20 64 72 6f 70 20 | 20 65 78 69 74 20 20 74 |f drop | exit t|
|00002780| 68 65 6e 09 5c 20 4f 75 | 74 20 69 66 20 6e 6f 20 |hen.\ Ou|t if no |
|00002790| 65 6c 65 6d 65 6e 74 73 | 0d 09 69 64 78 62 61 73 |elements|..idxbas|
|000027a0| 65 20 20 74 75 63 6b 20 | 20 72 65 6c 6f 63 21 20 |e tuck | reloc! |
|000027b0| 20 20 20 40 20 20 66 69 | 6c 6c 3a 20 73 75 70 65 | @ fi|ll: supe|
|000027c0| 72 20 20 3b 6d 0d 0d 3a | 6d 20 50 55 54 3a 09 09 |r ;m..:|m PUT:..|
|000027d0| 09 5c 20 28 20 78 74 30 | 20 2e 2e 2e 20 78 74 28 |.\ ( xt0| ... xt(|
|000027e0| 4e 2d 31 29 20 4e 20 2d | 2d 20 29 0d 09 6c 69 6d |N-1) N -|- )..lim|
|000027f0| 69 74 20 20 30 45 58 49 | 54 09 09 09 09 5c 20 4f |it 0EXI|T....\ O|
|00002800| 75 74 20 69 66 20 6e 6f | 20 65 6c 65 6d 65 6e 74 |ut if no| element|
|00002810| 73 0d 09 66 61 6c 73 65 | 20 2d 3e 20 72 65 6c 6f |s..false| -> relo|
|00002820| 63 43 68 6b 3f 09 09 09 | 5c 20 4d 61 79 20 67 65 |cChk?...|\ May ge|
|00002830| 74 20 75 73 65 64 20 69 | 6e 20 69 6e 73 74 61 6e |t used i|n instan|
|00002840| 74 69 61 74 69 6e 67 20 | 65 78 70 6f 72 74 65 64 |tiating |exported|
|00002850| 20 6f 62 6a 73 0d 09 6c | 69 6d 69 74 20 3f 23 78 | objs..l|imit ?#x|
|00002860| 74 73 0d 09 69 64 78 62 | 61 73 65 20 20 64 75 70 |ts..idxb|ase dup|
|00002870| 20 20 6c 69 6d 69 74 20 | 31 2d 20 20 34 2a 20 20 | limit |1- 4* |
|00002880| 2b 0d 09 64 6f 20 20 69 | 20 72 65 6c 6f 63 21 20 |+..do i| reloc! |
|00002890| 20 2d 34 20 2b 6c 6f 6f | 70 0d 09 74 72 75 65 20 | -4 +loo|p..true |
|000028a0| 2d 3e 20 72 65 6c 6f 63 | 43 68 6b 3f 20 20 3b 6d |-> reloc|Chk? ;m|
|000028b0| 0d 0d 3a 6d 20 41 43 54 | 49 4f 4e 53 3a 09 09 5c |..:m ACT|IONS:..\|
|000028c0| 20 41 20 73 79 6e 6f 6e | 79 6d 20 66 6f 72 20 70 | A synon|ym for p|
|000028d0| 75 74 3a 2e 20 20 41 20 | 6d 6f 72 65 20 61 70 70 |ut:. A |more app|
|000028e0| 72 6f 70 72 69 61 74 65 | 20 6e 61 6d 65 20 74 6f |ropriate| name to|
|000028f0| 20 75 73 65 20 69 6e 0d | 09 09 09 09 5c 20 73 75 | use in.|....\ su|
|00002900| 62 2d 63 6c 61 73 73 65 | 73 20 73 75 63 68 20 61 |b-classe|s such a|
|00002910| 73 20 64 69 61 6c 6f 67 | 73 2e 0d 09 70 75 74 3a |s dialog|s...put:|
|00002920| 20 73 65 6c 66 20 20 3b | 6d 0d 0d 70 72 69 76 61 | self ;|m..priva|
|00002930| 74 65 0d 0d 3a 6d 20 50 | 72 69 6e 74 4e 78 74 73 |te..:m P|rintNxts|
|00002940| 3a 09 5c 20 28 20 6e 20 | 2d 2d 20 29 0d 09 30 20 |:.\ ( n |-- )..0 |
|00002950| 3f 64 6f 20 20 69 20 5e | 65 6c 65 6d 3a 20 73 65 |?do i ^|elem: se|
|00002960| 6c 66 20 20 40 61 62 73 | 20 20 63 72 20 2e 69 64 |lf @abs| cr .id|
|00002970| 20 20 6c 6f 6f 70 20 20 | 3b 6d 0d 0d 70 75 62 6c | loop |;m..publ|
|00002980| 69 63 0d 0d 3a 6d 20 50 | 52 49 4e 54 3a 09 09 6c |ic..:m P|RINT:..l|
|00002990| 69 6d 69 74 20 20 70 72 | 69 6e 74 4e 78 74 73 3a |imit pr|intNxts:|
|000029a0| 20 73 65 6c 66 20 20 3b | 6d 0d 0d 3a 6d 20 43 4c | self ;|m..:m CL|
|000029b0| 41 53 53 49 4e 49 54 3a | 09 5b 27 5d 20 6e 75 6c |ASSINIT:|.['] nul|
|000029c0| 6c 20 20 66 69 6c 6c 3a | 20 73 65 6c 66 20 20 3b |l fill:| self ;|
|000029d0| 6d 0d 0d 3b 63 6c 61 73 | 73 0d 0d 0d 5c 20 53 45 |m..;clas|s...\ SE|
|000029e0| 51 55 45 4e 43 45 20 69 | 73 20 61 20 67 65 6e 65 |QUENCE i|s a gene|
|000029f0| 72 69 63 20 73 75 70 65 | 72 63 6c 61 73 73 20 66 |ric supe|rclass f|
|00002a00| 6f 72 20 63 6c 61 73 73 | 65 73 20 77 68 69 63 68 |or class|es which|
|00002a10| 20 68 61 76 65 20 6d 75 | 6c 74 69 70 6c 65 20 69 | have mu|ltiple i|
|00002a20| 74 65 6d 73 20 77 68 69 | 63 68 0d 5c 20 66 72 65 |tems whi|ch.\ fre|
|00002a30| 71 75 65 6e 74 6c 79 20 | 6e 65 65 64 20 74 6f 20 |quently |need to |
|00002a40| 62 65 20 6c 6f 6f 6b 65 | 64 20 61 74 20 69 6e 20 |be looke|d at in |
|00002a50| 73 65 71 75 65 6e 63 65 | 2e 20 20 41 74 20 70 72 |sequence|. At pr|
|00002a60| 65 73 65 6e 74 20 74 68 | 65 20 6d 61 69 6e 20 66 |esent th|e main f|
|00002a70| 75 6e 63 74 69 6f 6e 20 | 6f 66 0d 5c 20 53 65 71 |unction |of.\ Seq|
|00002a80| 75 65 6e 63 65 20 69 73 | 20 74 6f 20 69 6d 70 6c |uence is| to impl|
|00002a90| 65 6d 65 6e 74 20 74 68 | 65 20 45 41 43 48 3a 20 |ement th|e EACH: |
|00002aa0| 6d 65 74 68 6f 64 2c 20 | 77 68 69 63 68 20 6d 61 |method, |which ma|
|00002ab0| 6b 65 73 20 69 74 20 76 | 65 72 79 20 73 69 6d 70 |kes it v|ery simp|
|00002ac0| 6c 65 20 74 6f 0d 5c 20 | 64 65 61 6c 20 77 69 74 |le to.\ |deal wit|
|00002ad0| 68 20 65 61 63 68 20 65 | 6c 65 6d 65 6e 74 2e 20 |h each e|lement. |
|00002ae0| 20 54 68 65 20 75 73 61 | 67 65 20 69 73 0d 5c 0d | The usa|ge is.\.|
|00002af0| 5c 09 42 45 47 49 4e 20 | 20 65 61 63 68 3a 20 3c |\.BEGIN | each: <|
|00002b00| 6f 62 6a 3e 20 20 57 48 | 49 4c 45 20 20 3c 64 6f |obj> WH|ILE <do|
|00002b10| 20 73 6f 6d 65 74 68 69 | 6e 67 20 74 6f 20 74 68 | somethi|ng to th|
|00002b20| 65 20 65 6c 65 6d 65 6e | 74 3e 20 20 52 45 50 45 |e elemen|t> REPE|
|00002b30| 41 54 0d 5c 0d 5c 20 53 | 65 71 75 65 6e 63 65 20 |AT.\.\ S|equence |
|00002b40| 63 61 6e 20 62 65 20 6d | 75 6c 74 69 70 6c 79 20 |can be m|ultiply |
|00002b50| 69 6e 68 65 72 69 74 65 | 64 20 77 69 74 68 20 61 |inherite|d with a|
|00002b60| 6e 79 20 63 6c 61 73 73 | 20 77 68 69 63 68 20 69 |ny class| which i|
|00002b70| 6d 70 6c 65 6d 65 6e 74 | 73 20 74 68 65 0d 5c 20 |mplement|s the.\ |
|00002b80| 46 49 52 53 54 3f 3a 20 | 61 6e 64 20 4e 45 58 54 |FIRST?: |and NEXT|
|00002b90| 3f 3a 20 6d 65 74 68 6f | 64 73 2e 20 20 54 68 65 |?: metho|ds. The|
|00002ba0| 20 61 63 74 75 61 6c 20 | 69 6d 70 6c 65 6d 65 6e | actual |implemen|
|00002bb0| 74 61 74 69 6f 6e 20 64 | 65 74 61 69 6c 73 20 61 |tation d|etails a|
|00002bc0| 72 65 20 71 75 69 74 65 | 0d 5c 20 69 72 72 65 6c |re quite|.\ irrel|
|00002bd0| 65 76 61 6e 74 2c 20 61 | 73 20 6c 6f 6e 67 20 61 |evant, a|s long a|
|00002be0| 73 20 74 68 65 73 65 20 | 6d 65 74 68 6f 64 73 20 |s these |methods |
|00002bf0| 61 72 65 20 73 75 70 70 | 6f 72 74 65 64 2e 0d 0d |are supp|orted...|
|00002c00| 5c 20 42 75 74 20 6e 6f | 74 65 20 74 68 61 74 20 |\ But no|te that |
|00002c10| 61 6e 79 20 63 6c 61 73 | 73 20 75 73 69 6e 67 20 |any clas|s using |
|00002c20| 53 65 71 75 65 6e 63 65 | 20 73 68 6f 75 6c 64 20 |Sequence| should |
|00002c30| 6e 6f 74 20 61 70 70 65 | 61 72 20 69 6e 20 61 20 |not appe|ar in a |
|00002c40| 72 65 63 6f 72 64 2c 20 | 73 69 6e 63 65 0d 5c 20 |record, |since.\ |
|00002c50| 77 65 20 6d 75 73 74 20 | 6c 61 74 65 20 62 69 6e |we must |late bin|
|00002c60| 64 20 74 6f 20 73 65 6c | 66 2c 20 73 6f 20 61 20 |d to sel|f, so a |
|00002c70| 63 6c 61 73 73 20 70 6f | 69 6e 74 65 72 20 6d 75 |class po|inter mu|
|00002c80| 73 74 20 62 65 20 70 72 | 65 73 65 6e 74 2e 0d 0d |st be pr|esent...|
|00002c90| 3a 63 6c 61 73 73 09 53 | 45 51 55 45 4e 43 45 09 |:class.S|EQUENCE.|
|00002ca0| 73 75 70 65 72 7b 20 6f | 62 6a 65 63 74 20 7d 09 |super{ o|bject }.|
|00002cb0| 09 67 65 6e 65 72 61 6c | 0d 0d 72 65 63 6f 72 64 |.general|..record|
|00002cc0| 0d 7b 09 76 61 72 09 4e | 58 54 5f 58 54 0d 09 76 |.{.var.N|XT_XT..v|
|00002cd0| 61 72 09 5e 53 45 4c 46 | 0d 7d 0d 0d 3a 6d 20 45 |ar.^SELF|.}..:m E|
|00002ce0| 41 43 48 3a 09 09 5c 20 | 28 20 2d 2d 20 28 76 61 |ACH:..\ |( -- (va|
|00002cf0| 72 69 65 73 29 20 54 20 | 20 7c 20 20 2d 2d 20 46 |ries) T | | -- F|
|00002d00| 20 29 0d 09 67 65 74 3a | 20 6e 78 74 5f 78 74 0d | )..get:| nxt_xt.|
|00002d10| 09 4e 49 46 09 09 09 09 | 09 09 09 09 5c 20 46 69 |.NIF....|....\ Fi|
|00002d20| 72 73 74 20 74 69 6d 65 | 20 69 6e 3a 0d 09 09 66 |rst time| in:...f|
|00002d30| 69 72 73 74 3f 3a 20 5b | 73 65 6c 66 5d 20 20 30 |irst?: [|self] 0|
|00002d40| 64 75 70 20 20 30 45 58 | 49 54 0d 09 09 73 65 6c |dup 0EX|IT...sel|
|00002d50| 66 20 20 62 69 6e 64 5f | 77 69 74 68 20 6e 65 78 |f bind_|with nex|
|00002d60| 74 3f 3a 09 09 5c 20 4c | 61 74 65 2d 62 69 6e 64 |t?:..\ L|ate-bind|
|00002d70| 20 74 6f 20 6e 65 78 74 | 3f 3a 20 61 6e 64 20 63 | to next|?: and c|
|00002d80| 61 63 68 65 0d 09 09 70 | 75 74 3a 20 6e 78 74 5f |ache...p|ut: nxt_|
|00002d90| 78 74 20 20 70 75 74 3a | 20 5e 73 65 6c 66 09 09 |xt put:| ^self..|
|00002da0| 5c 20 20 74 68 65 20 78 | 74 20 66 6f 72 20 74 68 |\ the x|t for th|
|00002db0| 65 20 6c 6f 6f 70 0d 09 | 09 74 72 75 65 09 09 09 |e loop..|.true...|
|00002dc0| 09 09 09 5c 20 59 65 73 | 2c 20 77 65 27 76 65 20 |...\ Yes|, we've |
|00002dd0| 67 6f 74 20 74 68 65 20 | 31 73 74 20 65 6c 65 6d |got the |1st elem|
|00002de0| 65 6e 74 0d 09 45 4c 53 | 45 09 09 09 09 09 09 09 |ent..ELS|E.......|
|00002df0| 5c 20 53 75 62 73 65 71 | 75 65 6e 74 20 74 69 6d |\ Subseq|uent tim|
|00002e00| 65 20 69 6e 3a 0d 09 09 | 67 65 74 3a 20 5e 73 65 |e in:...|get: ^se|
|00002e10| 6c 66 20 20 67 65 74 3a | 20 6e 78 74 5f 78 74 20 |lf get:| nxt_xt |
|00002e20| 20 65 78 2d 6d 65 74 68 | 6f 64 09 09 5c 20 43 61 | ex-meth|od..\ Ca|
|00002e30| 6c 6c 20 6e 65 78 74 3f | 3a 20 6d 65 74 68 6f 64 |ll next?|: method|
|00002e40| 20 28 63 61 63 68 65 64 | 29 0d 09 09 49 46 20 20 | (cached|)...IF |
|00002e50| 74 72 75 65 20 20 45 4c | 53 45 20 20 63 6c 65 61 |true EL|SE clea|
|00002e60| 72 3a 20 6e 78 74 5f 78 | 74 20 20 66 61 6c 73 65 |r: nxt_x|t false|
|00002e70| 20 20 54 48 45 4e 0d 09 | 54 48 45 4e 20 20 3b 6d | THEN..|THEN ;m|
|00002e80| 0d 0d 3a 6d 20 55 4e 45 | 41 43 48 3a 09 5c 20 55 |..:m UNE|ACH:.\ U|
|00002e90| 73 65 20 74 6f 20 74 65 | 72 6d 69 6e 61 74 65 20 |se to te|rminate |
|00002ea0| 61 6e 20 45 41 43 48 3a | 20 6c 6f 6f 70 20 62 65 |an EACH:| loop be|
|00002eb0| 66 6f 72 65 20 74 68 65 | 20 65 6e 64 2e 0d 09 63 |fore the| end...c|
|00002ec0| 6c 65 61 72 3a 20 6e 78 | 74 5f 78 74 20 20 3b 6d |lear: nx|t_xt ;m|
|00002ed0| 0d 0d 3b 63 6c 61 73 73 | 0d 0d 0d 30 09 76 61 6c |..;class|...0.val|
|00002ee0| 75 65 09 4c 41 53 54 53 | 55 50 0d 30 09 76 61 6c |ue.LASTS|UP.0.val|
|00002ef0| 75 65 09 4c 41 53 54 53 | 55 50 41 44 44 52 0d 0d |ue.LASTS|UPADDR..|
|00002f00| 3a 20 52 45 4d 4f 56 45 | 4c 41 53 54 53 55 50 45 |: REMOVE|LASTSUPE|
|00002f10| 52 20 20 7b 20 5e 63 6c | 61 73 73 20 5c 20 69 6e |R { ^cl|ass \ in|
|00002f20| 66 61 20 2d 2d 20 7d 0d | 09 5e 63 6c 61 73 73 20 |fa -- }.|.^class |
|00002f30| 69 66 61 20 64 69 73 70 | 6c 61 63 65 20 20 2d 3e |ifa disp|lace ->|
|00002f40| 20 69 6e 66 61 0d 09 42 | 45 47 49 4e 20 20 69 6e | infa..B|EGIN in|
|00002f50| 66 61 20 40 20 30 3e 20 | 20 4e 57 48 49 4c 45 20 |fa @ 0> | NWHILE |
|00002f60| 20 69 6e 66 61 20 5e 6e | 65 78 74 69 76 61 72 20 | infa ^n|extivar |
|00002f70| 20 2d 3e 20 69 6e 66 61 | 0d 09 52 45 50 45 41 54 | -> infa|..REPEAT|
|00002f80| 0d 09 42 45 47 49 4e 0d | 09 09 34 20 2b 2b 3e 20 |..BEGIN.|..4 ++> |
|00002f90| 69 6e 66 61 0d 09 09 69 | 6e 66 61 20 40 0d 09 4e |infa...i|nfa @..N|
|00002fa0| 55 4e 54 49 4c 0d 09 34 | 20 2d 2d 3e 20 69 6e 66 |UNTIL..4| --> inf|
|00002fb0| 61 0d 09 69 6e 66 61 20 | 2d 3e 20 6c 61 73 74 53 |a..infa |-> lastS|
|00002fc0| 75 70 41 64 64 72 0d 09 | 69 6e 66 61 20 40 20 20 |upAddr..|infa @ |
|00002fd0| 2d 3e 20 6c 61 73 74 53 | 75 70 0d 09 30 20 69 6e |-> lastS|up..0 in|
|00002fe0| 66 61 20 21 20 20 3b 0d | 09 09 09 0d 3a 20 52 45 |fa ! ;.|....: RE|
|00002ff0| 53 54 4f 52 45 4c 41 53 | 54 53 55 50 45 52 0d 09 |STORELAS|TSUPER..|
|00003000| 6c 61 73 74 53 75 70 20 | 6c 61 73 74 53 75 70 41 |lastSup |lastSupA|
|00003010| 64 64 72 20 21 20 20 3b | 0d 0d 0d 28 2a 0d 4f 42 |ddr ! ;|...(*.OB|
|00003020| 4a 5f 41 52 52 41 59 20 | 69 73 20 61 20 67 65 6e |J_ARRAY |is a gen|
|00003030| 65 72 69 63 20 73 75 70 | 65 72 63 6c 61 73 73 20 |eric sup|erclass |
|00003040| 77 68 69 63 68 20 6d 61 | 6b 65 73 20 69 74 20 65 |which ma|kes it e|
|00003050| 61 73 79 20 74 6f 20 67 | 65 6e 65 72 61 74 65 20 |asy to g|enerate |
|00003060| 61 6e 20 61 72 72 61 79 | 0d 6f 66 20 6f 62 6a 65 |an array|.of obje|
|00003070| 63 74 73 20 6f 66 20 61 | 20 67 69 76 65 6e 20 63 |cts of a| given c|
|00003080| 6c 61 73 73 2e 20 20 4a | 75 73 74 20 64 65 66 69 |lass. J|ust defi|
|00003090| 6e 65 20 61 20 6e 65 77 | 20 63 6c 61 73 73 20 77 |ne a new| class w|
|000030a0| 68 69 63 68 20 6d 75 6c | 74 69 70 6c 79 0d 69 6e |hich mul|tiply.in|
|000030b0| 68 65 72 69 74 73 20 66 | 72 6f 6d 20 74 68 65 20 |herits f|rom the |
|000030c0| 67 69 76 65 6e 20 63 6c | 61 73 73 20 28 6f 72 20 |given cl|ass (or |
|000030d0| 63 6c 61 73 73 65 73 29 | 20 61 6e 64 20 4f 42 4a |classes)| and OBJ|
|000030e0| 5f 41 52 52 41 59 20 28 | 77 68 69 63 68 20 6d 75 |_ARRAY (|which mu|
|000030f0| 73 74 20 63 6f 6d 65 0d | 6c 61 73 74 29 2e 20 20 |st come.|last). |
|00003100| 54 68 69 73 20 77 69 6c | 6c 20 61 64 64 20 61 6e |This wil|l add an|
|00003110| 20 69 6e 64 65 78 65 64 | 20 73 65 63 74 69 6f 6e | indexed| section|
|00003120| 20 74 6f 20 65 61 63 68 | 20 6f 62 6a 65 63 74 20 | to each| object |
|00003130| 6f 66 20 74 68 65 20 6e | 65 77 20 63 6c 61 73 73 |of the n|ew class|
|00003140| 2c 0d 77 69 74 68 20 65 | 6c 65 6d 65 6e 74 73 20 |,.with e|lements |
|00003150| 77 69 64 65 20 65 6e 6f | 75 67 68 20 74 6f 20 63 |wide eno|ugh to c|
|00003160| 6f 6e 74 61 69 6e 20 6f | 62 6a 65 63 74 73 20 6f |ontain o|bjects o|
|00003170| 66 20 74 68 65 20 6f 72 | 69 67 69 6e 61 6c 20 63 |f the or|iginal c|
|00003180| 6c 61 73 73 2e 20 20 54 | 68 65 6e 0d 53 45 4c 45 |lass. T|hen.SELE|
|00003190| 43 54 3a 20 22 73 77 69 | 74 63 68 65 73 20 69 6e |CT: "swi|tches in|
|000031a0| 22 20 74 68 65 20 73 65 | 6c 65 63 74 65 64 20 65 |" the se|lected e|
|000031b0| 6c 65 6d 65 6e 74 20 74 | 6f 20 62 65 20 74 68 65 |lement t|o be the|
|000031c0| 20 22 63 75 72 72 65 6e | 74 22 20 65 6c 65 6d 65 | "curren|t" eleme|
|000031d0| 6e 74 2c 0d 61 6e 64 20 | 61 6c 6c 20 74 68 65 20 |nt,.and |all the |
|000031e0| 6e 6f 72 6d 61 6c 20 6d | 65 74 68 6f 64 73 20 20 |normal m|ethods |
|000031f0| 6f 66 20 74 68 65 20 63 | 6c 61 73 73 20 63 61 6e |of the c|lass can|
|00003200| 20 74 68 65 6e 20 62 65 | 20 75 73 65 64 2e 0d 54 | then be| used..T|
|00003210| 68 65 20 69 6d 70 6c 65 | 6d 65 6e 74 61 74 69 6f |he imple|mentatio|
|00003220| 6e 20 69 73 20 67 65 6e | 65 72 61 6c 20 72 61 74 |n is gen|eral rat|
|00003230| 68 65 72 20 74 68 61 6e | 20 62 72 69 6c 6c 69 61 |her than| brillia|
|00003240| 6e 74 6c 79 20 66 61 73 | 74 2e 20 20 49 66 20 73 |ntly fas|t. If s|
|00003250| 77 69 74 63 68 69 6e 67 | 0d 62 65 74 77 65 65 6e |witching|.between|
|00003260| 20 65 6c 65 6d 65 6e 74 | 73 20 69 73 20 72 65 61 | element|s is rea|
|00003270| 6c 6c 79 20 61 20 70 65 | 72 66 6f 72 6d 61 6e 63 |lly a pe|rformanc|
|00003280| 65 20 63 6f 6e 63 65 72 | 6e 2c 20 79 6f 75 20 63 |e concer|n, you c|
|00003290| 6f 75 6c 64 20 6f 76 65 | 72 72 69 64 65 0d 53 45 |ould ove|rride.SE|
|000032a0| 4c 45 43 54 3a 20 2d 20 | 65 73 70 65 63 69 61 6c |LECT: - |especial|
|000032b0| 6c 79 20 69 66 20 79 6f | 75 20 6b 6e 6f 77 20 74 |ly if yo|u know t|
|000032c0| 68 65 20 65 6c 65 6d 65 | 6e 74 20 77 69 64 74 68 |he eleme|nt width|
|000032d0| 2e 20 20 42 75 74 20 6e | 6f 74 65 2c 20 77 65 20 |. But n|ote, we |
|000032e0| 64 6f 0d 61 73 73 75 6d | 65 20 74 68 65 20 65 6c |do.assum|e the el|
|000032f0| 65 6d 65 6e 74 73 20 61 | 72 65 20 61 6c 69 67 6e |ements a|re align|
|00003300| 65 64 2e 0d 2a 29 0d 0d | 3a 63 6c 61 73 73 20 20 |ed..*)..|:class |
|00003310| 4f 42 4a 5f 41 52 52 41 | 59 20 20 73 75 70 65 72 |OBJ_ARRA|Y super|
|00003320| 7b 20 69 6e 64 65 78 65 | 64 2d 6f 62 6a 20 73 65 |{ indexe|d-obj se|
|00003330| 71 75 65 6e 63 65 20 7d | 09 33 32 37 36 37 20 69 |quence }|.32767 i|
|00003340| 6e 64 65 78 65 64 0d 09 | 09 09 5c 20 54 68 65 20 |ndexed..|..\ The |
|00003350| 33 32 37 36 37 20 73 69 | 67 6e 61 6c 73 20 74 68 |32767 si|gnals th|
|00003360| 61 74 20 74 68 65 20 72 | 65 61 6c 20 69 6e 64 65 |at the r|eal inde|
|00003370| 78 65 64 20 77 69 64 74 | 68 20 69 73 20 74 6f 20 |xed widt|h is to |
|00003380| 62 65 0d 09 09 09 5c 20 | 20 74 61 6b 65 6e 20 66 |be....\ | taken f|
|00003390| 72 6f 6d 20 74 68 65 20 | 6f 74 68 65 72 20 73 75 |rom the |other su|
|000033a0| 70 65 72 63 6c 61 73 73 | 28 65 73 29 2e 0d 0d 72 |perclass|(es)...r|
|000033b0| 65 63 6f 72 64 0d 7b 09 | 69 6e 74 20 20 43 55 52 |ecord.{.|int CUR|
|000033c0| 52 45 4e 54 20 20 7d 0d | 0d 3a 6d 20 43 55 52 52 |RENT }.|.:m CURR|
|000033d0| 45 4e 54 3a 0d 09 67 65 | 74 3a 20 63 75 72 72 65 |ENT:..ge|t: curre|
|000033e0| 6e 74 20 20 3b 6d 0d 0d | 3a 6d 20 53 45 4c 45 43 |nt ;m..|:m SELEC|
|000033f0| 54 3a 20 20 7b 20 69 64 | 78 20 5c 20 64 61 74 61 |T: { id|x \ data|
|00003400| 6c 65 6e 20 73 6c 66 20 | 2d 2d 20 7d 0d 09 69 64 |len slf |-- }..id|
|00003410| 78 20 20 67 65 74 3a 20 | 63 75 72 72 65 6e 74 20 |x get: |current |
|00003420| 3d 20 20 3f 45 58 49 54 | 09 09 09 09 5c 20 6f 75 |= ?EXIT|....\ ou|
|00003430| 74 20 69 66 20 6e 6f 74 | 68 69 6e 67 20 74 6f 20 |t if not|hing to |
|00003440| 64 6f 0d 09 77 69 64 74 | 68 3a 20 73 65 6c 66 20 |do..widt|h: self |
|00003450| 20 2d 3e 20 64 61 74 61 | 6c 65 6e 20 20 20 73 65 | -> data|len se|
|00003460| 6c 66 20 2d 3e 20 73 6c | 66 09 09 09 09 5c 20 73 |lf -> sl|f....\ s|
|00003470| 65 74 20 75 70 0d 09 73 | 6c 66 20 20 67 65 74 3a |et up..s|lf get:|
|00003480| 20 63 75 72 72 65 6e 74 | 20 20 5e 65 6c 65 6d 20 | current| ^elem |
|00003490| 20 64 61 74 61 6c 65 6e | 20 20 61 6c 69 67 6e 65 | datalen| aligne|
|000034a0| 64 5f 6d 6f 76 65 09 09 | 5c 20 73 77 69 74 63 68 |d_move..|\ switch|
|000034b0| 20 6f 75 74 20 70 72 65 | 76 69 6f 75 73 0d 09 69 | out pre|vious..i|
|000034c0| 64 78 20 5e 65 6c 65 6d | 09 09 09 09 09 09 09 09 |dx ^elem|........|
|000034d0| 5c 20 6e 6f 74 65 3a 20 | 77 69 6c 6c 20 67 69 76 |\ note: |will giv|
|000034e0| 65 20 61 6e 20 65 72 72 | 6f 72 20 69 66 20 6f 75 |e an err|or if ou|
|000034f0| 74 20 6f 66 20 72 61 6e | 67 65 0d 09 09 09 09 09 |t of ran|ge......|
|00003500| 09 09 09 09 09 09 5c 20 | 20 2d 20 73 6f 20 77 65 |......\ | - so we|
|00003510| 20 64 6f 20 69 74 20 62 | 65 66 6f 72 65 20 77 65 | do it b|efore we|
|00003520| 20 73 74 6f 72 65 20 69 | 6e 20 63 75 72 72 65 6e | store i|n curren|
|00003530| 74 0d 09 73 6c 66 20 20 | 64 61 74 61 6c 65 6e 20 |t..slf |datalen |
|00003540| 20 61 6c 69 67 6e 65 64 | 5f 6d 6f 76 65 09 09 09 | aligned|_move...|
|00003550| 09 5c 20 73 77 69 74 63 | 68 20 69 6e 20 6e 65 77 |.\ switc|h in new|
|00003560| 0d 09 69 64 78 20 20 70 | 75 74 3a 20 63 75 72 72 |..idx p|ut: curr|
|00003570| 65 6e 74 20 20 3b 6d 0d | 0d 3a 6d 20 46 49 52 53 |ent ;m.|.:m FIRS|
|00003580| 54 3f 3a 0d 09 6c 69 6d | 69 74 20 4e 49 46 20 20 |T?:..lim|it NIF |
|00003590| 66 61 6c 73 65 20 20 45 | 58 49 54 20 20 54 48 45 |false E|XIT THE|
|000035a0| 4e 0d 09 30 20 20 73 65 | 6c 65 63 74 3a 20 73 65 |N..0 se|lect: se|
|000035b0| 6c 66 20 20 74 72 75 65 | 20 20 3b 6d 0d 0d 3a 6d |lf true| ;m..:m|
|000035c0| 20 4e 45 58 54 3f 3a 0d | 09 67 65 74 3a 20 63 75 | NEXT?:.|.get: cu|
|000035d0| 72 72 65 6e 74 20 31 2b | 20 20 6c 69 6d 69 74 20 |rrent 1+| limit |
|000035e0| 20 3e 3d 20 20 49 46 20 | 20 66 61 6c 73 65 20 20 | >= IF | false |
|000035f0| 45 58 49 54 20 20 54 48 | 45 4e 0d 09 67 65 74 3a |EXIT TH|EN..get:|
|00003600| 20 63 75 72 72 65 6e 74 | 20 31 2b 20 20 73 65 6c | current| 1+ sel|
|00003610| 65 63 74 3a 20 73 65 6c | 66 20 20 74 72 75 65 20 |ect: sel|f true |
|00003620| 20 3b 6d 0d 09 0d 0d 3a | 6d 20 50 52 49 4e 54 41 | ;m....:|m PRINTA|
|00003630| 4c 4c 3a 09 5c 20 53 65 | 6e 64 73 20 50 52 49 4e |LL:.\ Se|nds PRIN|
|00003640| 54 3a 20 74 6f 20 61 6c | 6c 20 65 6c 65 6d 65 6e |T: to al|l elemen|
|00003650| 74 73 0d 09 67 65 74 3a | 20 63 75 72 72 65 6e 74 |ts..get:| current|
|00003660| 0d 09 42 45 47 49 4e 20 | 20 65 61 63 68 3a 20 73 |..BEGIN | each: s|
|00003670| 65 6c 66 20 20 57 48 49 | 4c 45 20 20 70 72 69 6e |elf WHI|LE prin|
|00003680| 74 3a 20 5b 73 65 6c 66 | 5d 20 20 52 45 50 45 41 |t: [self|] REPEA|
|00003690| 54 0d 09 73 65 6c 65 63 | 74 3a 20 73 65 6c 66 20 |T..selec|t: self |
|000036a0| 20 3b 6d 0d 0d 28 2a 0d | 43 4c 41 53 53 49 4e 49 | ;m..(*.|CLASSINI|
|000036b0| 54 3a 20 6e 65 65 64 73 | 20 74 6f 20 69 6e 69 74 |T: needs| to init|
|000036c0| 69 61 6c 69 7a 65 20 61 | 6c 6c 20 74 68 65 20 65 |ialize a|ll the e|
|000036d0| 6c 65 6d 65 6e 74 73 2e | 20 20 45 6c 65 6d 65 6e |lements.| Elemen|
|000036e0| 74 20 30 20 68 61 73 20 | 62 65 65 6e 0d 69 6e 69 |t 0 has |been.ini|
|000036f0| 74 69 61 6c 69 7a 65 64 | 20 61 6c 72 65 61 64 79 |tialized| already|
|00003700| 2c 20 62 79 20 74 68 65 | 20 74 69 6d 65 20 77 65 |, by the| time we|
|00003710| 20 67 65 74 20 63 6c 61 | 73 73 69 6e 69 74 3a 20 | get cla|ssinit: |
|00003720| 73 65 6e 74 20 68 65 72 | 65 2c 20 73 69 6e 63 65 |sent her|e, since|
|00003730| 20 77 65 27 72 65 0d 74 | 68 65 20 6c 61 73 74 20 | we're.t|he last |
|00003740| 73 75 70 65 72 63 6c 61 | 73 73 2e 20 20 57 65 20 |supercla|ss. We |
|00003750| 63 6f 75 6c 64 20 73 65 | 6c 65 63 74 20 65 61 63 |could se|lect eac|
|00003760| 68 20 65 6c 65 6d 65 6e | 74 20 61 6e 64 20 73 65 |h elemen|t and se|
|00003770| 6e 64 20 64 65 65 70 5f | 63 6c 61 73 73 69 6e 69 |nd deep_|classini|
|00003780| 74 3a 2c 0d 62 75 74 20 | 69 74 27 73 20 61 20 62 |t:,.but |it's a b|
|00003790| 69 74 20 74 72 69 63 6b | 79 20 67 65 74 74 69 6e |it trick|y gettin|
|000037a0| 67 20 74 68 65 20 72 69 | 67 68 74 20 63 6c 61 73 |g the ri|ght clas|
|000037b0| 73 20 74 6f 20 75 73 65 | 2e 20 20 49 6e 73 74 65 |s to use|. Inste|
|000037c0| 61 64 20 77 65 27 6c 6c | 20 6a 75 73 74 0d 63 6f |ad we'll| just.co|
|000037d0| 70 79 20 65 6c 65 6d 65 | 6e 74 20 30 20 74 6f 20 |py eleme|nt 0 to |
|000037e0| 74 68 65 20 6f 74 68 65 | 72 20 65 6c 65 6d 65 6e |the othe|r elemen|
|000037f0| 74 73 2c 20 77 68 69 63 | 68 20 77 69 6c 6c 20 75 |ts, whic|h will u|
|00003800| 73 75 61 6c 6c 79 20 62 | 65 20 67 6f 6f 64 20 65 |sually b|e good e|
|00003810| 6e 6f 75 67 68 2e 0d 2a | 29 0d 0d 3a 6d 20 43 4c |nough..*|)..:m CL|
|00003820| 41 53 53 49 4e 49 54 3a | 20 20 7b 20 5c 20 64 6c |ASSINIT:| { \ dl|
|00003830| 6e 20 73 6c 66 20 2d 2d | 20 7d 0d 09 77 69 64 74 |n slf --| }..widt|
|00003840| 68 3a 20 73 65 6c 66 20 | 20 2d 3e 20 64 6c 6e 20 |h: self | -> dln |
|00003850| 20 20 73 65 6c 66 20 2d | 3e 20 73 6c 66 09 09 09 | self -|> slf...|
|00003860| 5c 20 73 65 74 20 75 70 | 0d 09 6c 69 6d 69 74 20 |\ set up|..limit |
|00003870| 20 31 09 09 5c 20 6e 6f | 74 65 3a 20 65 6c 74 20 | 1..\ no|te: elt |
|00003880| 30 20 68 61 73 20 68 61 | 64 20 63 6c 61 73 73 69 |0 has ha|d classi|
|00003890| 6e 69 74 3a 20 61 6c 72 | 65 61 64 79 21 0d 09 3f |nit: alr|eady!..?|
|000038a0| 44 4f 0d 20 20 20 09 09 | 73 6c 66 20 20 69 20 5e |DO. ..|slf i ^|
|000038b0| 65 6c 65 6d 20 20 64 6c | 6e 20 20 61 6c 69 67 6e |elem dl|n align|
|000038c0| 65 64 5f 6d 6f 76 65 0d | 09 4c 4f 4f 50 0d 3b 6d |ed_move.|.LOOP.;m|
|000038d0| 0d 0d 3b 63 6c 61 73 73 | 0d 0d 0d 28 2a 20 4c 41 |..;class|...(* LA|
|000038e0| 52 47 45 5f 4f 42 4a 5f | 41 52 52 41 59 20 69 73 |RGE_OBJ_|ARRAY is|
|000038f0| 20 73 69 6d 69 6c 61 72 | 20 69 6e 20 75 73 61 67 | similar| in usag|
|00003900| 65 20 74 6f 20 4f 42 4a | 5f 41 52 52 41 59 2c 20 |e to OBJ|_ARRAY, |
|00003910| 62 75 74 20 69 73 20 66 | 61 73 74 65 72 0d 69 66 |but is f|aster.if|
|00003920| 20 74 68 65 20 65 6c 65 | 6d 65 6e 74 73 20 61 72 | the ele|ments ar|
|00003930| 65 20 6c 61 72 67 65 20 | 28 3e 32 30 20 62 79 74 |e large |(>20 byt|
|00003940| 65 73 20 6f 72 20 73 6f | 29 2e 0d 0d 57 68 65 6e |es or so|)...When|
|00003950| 20 77 65 20 73 65 6c 65 | 63 74 20 61 6e 20 65 6c | we sele|ct an el|
|00003960| 65 6d 65 6e 74 2c 20 77 | 65 20 64 6f 6e 27 74 20 |ement, w|e don't |
|00003970| 6d 6f 76 65 20 69 74 2c | 20 62 75 74 20 69 6e 73 |move it,| but ins|
|00003980| 74 65 61 64 20 75 70 64 | 61 74 65 0d 61 6e 20 6f |tead upd|ate.an o|
|00003990| 66 66 73 65 74 20 74 6f | 20 74 68 65 20 63 75 72 |ffset to| the cur|
|000039a0| 72 65 6e 74 20 65 6c 65 | 6d 65 6e 74 2c 20 77 68 |rent ele|ment, wh|
|000039b0| 69 63 68 20 77 65 20 6b | 65 65 70 20 69 6e 20 74 |ich we k|eep in t|
|000039c0| 68 65 20 69 76 61 72 20 | 78 64 69 73 70 6c 2e 0d |he ivar |xdispl..|
|000039d0| 57 68 65 6e 20 77 65 20 | 63 61 6c 6c 20 61 20 6d |When we |call a m|
|000039e0| 65 74 68 6f 64 20 69 6e | 20 74 68 65 20 73 65 6c |ethod in| the sel|
|000039f0| 65 63 74 65 64 20 65 6c | 65 6d 65 6e 74 2c 20 5e |ected el|ement, ^|
|00003a00| 62 61 73 65 20 69 73 20 | 73 65 74 20 74 6f 0d 74 |base is |set to.t|
|00003a10| 68 65 20 65 6c 65 6d 65 | 6e 74 2c 20 6e 61 74 75 |he eleme|nt, natu|
|00003a20| 72 61 6c 6c 79 2e 20 20 | 54 68 69 73 20 6d 65 61 |rally. |This mea|
|00003a30| 6e 73 20 74 68 61 74 20 | 77 65 20 6e 65 65 64 20 |ns that |we need |
|00003a40| 61 20 5e 63 6c 61 73 73 | 20 6f 66 66 73 65 74 0d |a ^class| offset.|
|00003a50| 61 74 20 74 68 65 20 73 | 74 61 72 74 20 6f 66 20 |at the s|tart of |
|00003a60| 65 61 63 68 20 65 6c 65 | 6d 65 6e 74 2c 20 77 68 |each ele|ment, wh|
|00003a70| 69 63 68 20 77 65 20 64 | 69 64 6e 27 74 20 6e 65 |ich we d|idn't ne|
|00003a80| 65 64 20 69 6e 20 6f 62 | 6a 5f 61 72 72 61 79 2e |ed in ob|j_array.|
|00003a90| 0d 53 6f 20 77 65 20 61 | 6c 6c 6f 63 61 74 65 20 |.So we a|llocate |
|00003aa0| 74 77 6f 20 65 78 74 72 | 61 20 62 79 74 65 73 20 |two extr|a bytes |
|00003ab0| 66 6f 72 20 65 61 63 68 | 20 65 6c 65 6d 65 6e 74 |for each| element|
|00003ac0| 2c 20 61 6e 64 20 73 65 | 74 20 75 70 20 61 6c 6c |, and se|t up all|
|00003ad0| 0d 74 68 65 20 5e 63 6c | 61 73 73 20 6f 66 66 73 |.the ^cl|ass offs|
|00003ae0| 65 74 73 20 61 74 20 63 | 6c 61 73 73 69 6e 69 74 |ets at c|lassinit|
|00003af0| 3a 20 74 69 6d 65 2e 0d | 2a 29 0d 0d 3a 63 6c 61 |: time..|*)..:cla|
|00003b00| 73 73 20 20 4c 41 52 47 | 45 5f 4f 42 4a 5f 41 52 |ss LARG|E_OBJ_AR|
|00003b10| 52 41 59 20 20 73 75 70 | 65 72 7b 20 69 6e 64 65 |RAY sup|er{ inde|
|00003b20| 78 65 64 2d 6f 62 6a 20 | 73 65 71 75 65 6e 63 65 |xed-obj |sequence|
|00003b30| 20 7d 09 33 32 37 36 36 | 20 69 6e 64 65 78 65 64 | }.32766| indexed|
|00003b40| 0d 09 09 09 5c 20 54 68 | 65 20 33 32 37 36 36 20 |....\ Th|e 32766 |
|00003b50| 73 69 67 6e 61 6c 73 20 | 74 68 61 74 20 74 68 65 |signals |that the|
|00003b60| 20 72 65 61 6c 20 69 6e | 64 65 78 65 64 20 77 69 | real in|dexed wi|
|00003b70| 64 74 68 20 69 73 20 74 | 6f 20 62 65 0d 09 09 09 |dth is t|o be....|
|00003b80| 5c 20 20 74 61 6b 65 6e | 20 66 72 6f 6d 20 74 68 |\ taken| from th|
|00003b90| 65 20 6f 74 68 65 72 20 | 73 75 70 65 72 63 6c 61 |e other |supercla|
|00003ba0| 73 73 28 65 73 29 2e 0d | 0d 0d 72 65 63 6f 72 64 |ss(es)..|..record|
|00003bb0| 0d 7b 09 76 61 72 20 20 | 78 64 69 73 70 6c 0d 09 |.{.var |xdispl..|
|00003bc0| 69 6e 74 20 20 43 55 52 | 52 45 4e 54 20 20 7d 0d |int CUR|RENT }.|
|00003bd0| 0d 3a 6d 20 43 55 52 52 | 45 4e 54 3a 0d 09 67 65 |.:m CURR|ENT:..ge|
|00003be0| 74 3a 20 63 75 72 72 65 | 6e 74 20 20 3b 6d 0d 0d |t: curre|nt ;m..|
|00003bf0| 3a 6d 20 53 45 4c 45 43 | 54 3a 20 20 7b 20 69 64 |:m SELEC|T: { id|
|00003c00| 78 20 5c 20 64 61 74 61 | 6c 65 6e 20 73 6c 66 20 |x \ data|len slf |
|00003c10| 2d 2d 20 7d 0d 09 69 64 | 78 20 20 67 65 74 3a 20 |-- }..id|x get: |
|00003c20| 63 75 72 72 65 6e 74 20 | 3d 20 20 3f 45 58 49 54 |current |= ?EXIT|
|00003c30| 09 09 09 5c 20 6f 75 74 | 20 69 66 20 6e 6f 74 68 |...\ out| if noth|
|00003c40| 69 6e 67 20 74 6f 20 64 | 6f 0d 09 69 64 78 20 5e |ing to d|o..idx ^|
|00003c50| 65 6c 65 6d 20 32 2b 09 | 09 09 09 09 09 5c 20 32 |elem 2+.|.....\ 2|
|00003c60| 2b 20 74 6f 20 73 74 65 | 70 20 6f 76 65 72 20 5e |+ to ste|p over ^|
|00003c70| 63 6c 61 73 73 20 6f 66 | 66 73 65 74 0d 09 61 64 |class of|fset..ad|
|00003c80| 64 72 3a 20 78 64 69 73 | 70 6c 20 20 64 69 73 70 |dr: xdis|pl disp|
|00003c90| 6c 21 0d 09 69 64 78 20 | 20 70 75 74 3a 20 63 75 |l!..idx | put: cu|
|00003ca0| 72 72 65 6e 74 20 20 3b | 6d 0d 0d 3a 6d 20 46 49 |rrent ;|m..:m FI|
|00003cb0| 52 53 54 3f 3a 0d 09 6c | 69 6d 69 74 20 4e 49 46 |RST?:..l|imit NIF|
|00003cc0| 20 20 66 61 6c 73 65 20 | 20 45 58 49 54 20 20 54 | false | EXIT T|
|00003cd0| 48 45 4e 0d 09 30 20 20 | 73 65 6c 65 63 74 3a 20 |HEN..0 |select: |
|00003ce0| 73 65 6c 66 20 20 74 72 | 75 65 20 20 3b 6d 0d 0d |self tr|ue ;m..|
|00003cf0| 3a 6d 20 4e 45 58 54 3f | 3a 0d 09 67 65 74 3a 20 |:m NEXT?|:..get: |
|00003d00| 63 75 72 72 65 6e 74 20 | 31 2b 20 20 6c 69 6d 69 |current |1+ limi|
|00003d10| 74 20 20 3e 3d 20 20 49 | 46 20 20 66 61 6c 73 65 |t >= I|F false|
|00003d20| 20 20 45 58 49 54 20 20 | 54 48 45 4e 0d 09 67 65 | EXIT |THEN..ge|
|00003d30| 74 3a 20 63 75 72 72 65 | 6e 74 20 31 2b 20 20 73 |t: curre|nt 1+ s|
|00003d40| 65 6c 65 63 74 3a 20 73 | 65 6c 66 20 20 74 72 75 |elect: s|elf tru|
|00003d50| 65 20 20 3b 6d 0d 09 0d | 0d 3a 6d 20 50 52 49 4e |e ;m...|.:m PRIN|
|00003d60| 54 41 4c 4c 3a 09 5c 20 | 53 65 6e 64 73 20 50 52 |TALL:.\ |Sends PR|
|00003d70| 49 4e 54 3a 20 74 6f 20 | 61 6c 6c 20 65 6c 65 6d |INT: to |all elem|
|00003d80| 65 6e 74 73 0d 09 67 65 | 74 3a 20 63 75 72 72 65 |ents..ge|t: curre|
|00003d90| 6e 74 0d 09 42 45 47 49 | 4e 20 20 65 61 63 68 3a |nt..BEGI|N each:|
|00003da0| 20 73 65 6c 66 20 20 57 | 48 49 4c 45 20 20 70 72 | self W|HILE pr|
|00003db0| 69 6e 74 3a 20 5b 73 65 | 6c 66 5d 20 20 52 45 50 |int: [se|lf] REP|
|00003dc0| 45 41 54 0d 09 73 65 6c | 65 63 74 3a 20 73 65 6c |EAT..sel|ect: sel|
|00003dd0| 66 20 20 3b 6d 0d 0d 28 | 2a 0d 43 4c 41 53 53 49 |f ;m..(|*.CLASSI|
|00003de0| 4e 49 54 3a 20 6e 65 65 | 64 73 20 74 6f 20 69 6e |NIT: nee|ds to in|
|00003df0| 69 74 69 61 6c 69 7a 65 | 20 61 6c 6c 20 74 68 65 |itialize| all the|
|00003e00| 20 65 6c 65 6d 65 6e 74 | 73 2e 20 20 54 68 65 20 | element|s. The |
|00003e10| 62 61 73 65 20 6f 62 6a | 65 63 74 20 68 61 73 20 |base obj|ect has |
|00003e20| 62 65 65 6e 0d 73 65 74 | 20 75 70 20 61 6c 72 65 |been.set| up alre|
|00003e30| 61 64 79 2c 20 62 79 20 | 74 68 65 20 74 69 6d 65 |ady, by |the time|
|00003e40| 20 77 65 20 67 65 74 20 | 63 6c 61 73 73 69 6e 69 | we get |classini|
|00003e50| 74 3a 20 73 65 6e 74 20 | 68 65 72 65 2c 20 73 69 |t: sent |here, si|
|00003e60| 6e 63 65 20 77 65 27 72 | 65 0d 74 68 65 20 6c 61 |nce we'r|e.the la|
|00003e70| 73 74 20 73 75 70 65 72 | 63 6c 61 73 73 2c 20 62 |st super|class, b|
|00003e80| 75 74 20 69 74 20 69 73 | 6e 27 74 20 6f 6e 65 20 |ut it is|n't one |
|00003e90| 6f 66 20 74 68 65 20 65 | 6c 65 6d 65 6e 74 73 21 |of the e|lements!|
|00003ea0| 20 20 53 6f 20 61 6e 61 | 6c 6f 67 6f 75 73 6c 79 | So ana|logously|
|00003eb0| 0d 74 6f 20 77 68 61 74 | 20 77 65 20 64 6f 20 69 |.to what| we do i|
|00003ec0| 6e 20 4f 42 4a 5f 41 52 | 52 41 59 2c 20 77 65 20 |n OBJ_AR|RAY, we |
|00003ed0| 63 6f 70 79 20 74 68 65 | 20 62 61 73 65 20 6f 62 |copy the| base ob|
|00003ee0| 6a 65 63 74 20 74 6f 20 | 61 6c 6c 20 74 68 65 20 |ject to |all the |
|00003ef0| 65 6c 65 6d 65 6e 74 73 | 0d 28 49 4e 43 4c 55 44 |elements|.(INCLUD|
|00003f00| 49 4e 47 20 65 6c 74 20 | 7a 65 72 6f 20 68 65 72 |ING elt |zero her|
|00003f10| 65 21 29 2e 0d 2a 29 0d | 0d 3a 6d 20 43 4c 41 53 |e!)..*).|.:m CLAS|
|00003f20| 53 49 4e 49 54 3a 20 20 | 7b 20 5c 20 64 6c 6e 20 |SINIT: |{ \ dln |
|00003f30| 73 6c 66 20 61 64 64 72 | 20 5e 6f 62 6a 20 2d 2d |slf addr| ^obj --|
|00003f40| 20 7d 0d 09 5e 62 61 73 | 65 20 32 2d 20 77 64 69 | }..^bas|e 2- wdi|
|00003f50| 73 70 6c 61 63 65 20 20 | 2d 3e 20 5e 6f 62 6a 0d |splace |-> ^obj.|
|00003f60| 09 77 69 64 74 68 3a 20 | 73 65 6c 66 20 20 2d 3e |.width: |self ->|
|00003f70| 20 64 6c 6e 20 20 20 73 | 65 6c 66 20 2d 3e 20 73 | dln s|elf -> s|
|00003f80| 6c 66 09 09 09 5c 20 73 | 65 74 20 75 70 0d 09 6c |lf...\ s|et up..l|
|00003f90| 69 6d 69 74 20 20 30 0d | 09 3f 44 4f 0d 20 20 20 |imit 0.|.?DO. |
|00003fa0| 09 09 69 20 5e 65 6c 65 | 6d 20 20 2d 3e 20 61 64 |..i ^ele|m -> ad|
|00003fb0| 64 72 0d 20 20 20 09 09 | 5e 6f 62 6a 20 61 64 64 |dr. ..|^obj add|
|00003fc0| 72 20 77 64 69 73 70 6c | 21 0d 20 20 20 09 09 73 |r wdispl|!. ..s|
|00003fd0| 6c 66 20 61 64 64 72 20 | 32 2b 20 64 6c 6e 20 20 |lf addr |2+ dln |
|00003fe0| 61 6c 69 67 6e 65 64 5f | 6d 6f 76 65 0d 09 4c 4f |aligned_|move..LO|
|00003ff0| 4f 50 0d 5c 20 6e 6f 77 | 20 77 65 20 73 65 74 20 |OP.\ now| we set |
|00004000| 75 70 20 74 68 65 20 78 | 64 69 73 70 6c 20 69 76 |up the x|displ iv|
|00004010| 61 72 2c 20 73 6f 20 65 | 6c 74 20 30 20 69 73 20 |ar, so e|lt 0 is |
|00004020| 69 6e 69 74 69 61 6c 6c | 79 20 73 65 6c 65 63 74 |initiall|y select|
|00004030| 65 64 2e 0d 09 69 64 78 | 42 61 73 65 20 32 2b 20 |ed...idx|Base 2+ |
|00004040| 20 61 64 64 72 3a 20 78 | 64 69 73 70 6c 20 20 64 | addr: x|displ d|
|00004050| 69 73 70 6c 21 0d 3b 6d | 0d 0d 3b 63 6c 61 73 73 |ispl!.;m|..;class|
|00004060| 0d 0d 0d 5c 20 28 50 48 | 6c 69 73 74 29 20 69 73 |...\ (PH|list) is|
|00004070| 20 61 20 73 75 70 65 72 | 63 6c 61 73 73 20 66 6f | a super|class fo|
|00004080| 72 20 48 61 6e 64 6c 65 | 4c 69 73 74 20 61 6e 64 |r Handle|List and|
|00004090| 20 50 74 72 4c 69 73 74 | 2c 20 6d 61 69 6e 6c 79 | PtrList|, mainly|
|000040a0| 20 61 69 6d 65 64 20 61 | 74 0d 5c 20 66 61 63 74 | aimed a|t.\ fact|
|000040b0| 6f 72 69 6e 67 20 6f 75 | 74 20 63 6f 6d 6d 6f 6e |oring ou|t common|
|000040c0| 20 63 6f 64 65 2e 20 20 | 49 74 27 73 20 72 65 61 | code. |It's rea|
|000040d0| 6c 6c 79 20 6f 6e 6c 79 | 20 6d 65 61 6e 74 20 66 |lly only| meant f|
|000040e0| 6f 72 20 69 6e 74 65 72 | 6e 61 6c 20 75 73 65 2e |or inter|nal use.|
|000040f0| 0d 0d 3a 63 6c 61 73 73 | 20 28 50 48 6c 69 73 74 |..:class| (PHlist|
|00004100| 29 20 20 73 75 70 65 72 | 7b 20 73 65 71 75 65 6e |) super|{ sequen|
|00004110| 63 65 20 7d 0d 0d 72 65 | 63 6f 72 64 0d 7b 09 68 |ce }..re|cord.{.h|
|00004120| 61 6e 64 6c 65 09 54 48 | 45 4c 49 53 54 0d 09 76 |andle.TH|ELIST..v|
|00004130| 61 72 09 09 53 49 5a 45 | 09 09 5c 20 73 69 7a 65 |ar..SIZE|..\ size|
|00004140| 20 6f 66 20 6c 69 73 74 | 20 69 6e 20 62 79 74 65 | of list| in byte|
|00004150| 73 2c 20 77 68 69 63 68 | 20 69 73 20 77 68 61 74 |s, which| is what|
|00004160| 20 61 20 68 61 6e 64 6c | 65 0d 09 09 09 09 09 09 | a handl|e.......|
|00004170| 5c 20 20 6d 65 61 6e 73 | 20 62 79 20 22 73 69 7a |\ means| by "siz|
|00004180| 65 22 2e 20 20 44 69 76 | 69 64 65 20 62 79 20 34 |e". Div|ide by 4|
|00004190| 20 74 6f 20 67 65 74 20 | 6e 75 6d 62 65 72 0d 09 | to get |number..|
|000041a0| 09 09 09 09 09 5c 20 20 | 6f 66 20 65 6c 65 6d 65 |.....\ |of eleme|
|000041b0| 6e 74 73 20 2d 2d 20 73 | 69 7a 65 3a 20 6d 65 74 |nts -- s|ize: met|
|000041c0| 68 6f 64 20 62 65 6c 6f | 77 20 64 6f 65 73 20 74 |hod belo|w does t|
|000041d0| 68 69 73 2e 0d 09 76 61 | 72 09 09 50 4f 53 09 09 |his...va|r..POS..|
|000041e0| 09 5c 20 6f 66 66 73 65 | 74 20 6f 66 20 63 75 72 |.\ offse|t of cur|
|000041f0| 72 65 6e 74 20 65 6c 65 | 6d 65 6e 74 2c 20 69 6e |rent ele|ment, in|
|00004200| 20 62 79 74 65 73 0d 7d | 0d 0d 70 72 69 76 61 74 | bytes.}|..privat|
|00004210| 65 0d 0d 3a 6d 20 20 28 | 53 45 4c 29 3a 09 5c 20 |e..:m (|SEL):.\ |
|00004220| 28 20 6e 20 2d 2d 20 29 | 20 20 6e 20 69 73 20 6f |( n -- )| n is o|
|00004230| 66 66 73 65 74 20 69 6e | 74 6f 20 74 68 65 4c 69 |ffset in|to theLi|
|00004240| 73 74 2c 20 4e 4f 54 20 | 61 6e 20 69 6e 64 65 78 |st, NOT |an index|
|00004250| 2e 0d 09 73 65 6c 66 20 | 40 20 20 70 74 72 3a 20 |...self |@ ptr: |
|00004260| 74 68 65 4c 69 73 74 20 | 20 67 65 74 3a 20 70 6f |theList | get: po|
|00004270| 73 20 2b 20 20 21 09 09 | 5c 20 73 77 69 74 63 68 |s + !..|\ switch|
|00004280| 20 6f 75 74 20 70 72 65 | 76 69 6f 75 73 0d 09 70 | out pre|vious..p|
|00004290| 75 74 3a 20 70 6f 73 0d | 09 70 74 72 3a 20 74 68 |ut: pos.|.ptr: th|
|000042a0| 65 4c 69 73 74 20 20 67 | 65 74 3a 20 70 6f 73 20 |eList g|et: pos |
|000042b0| 20 2b 20 20 40 20 20 73 | 65 6c 66 20 21 09 5c 20 | + @ s|elf !.\ |
|000042c0| 73 77 69 74 63 68 20 69 | 6e 20 6e 65 77 0d 3b 6d |switch i|n new.;m|
|000042d0| 0d 0d 70 75 62 6c 69 63 | 0d 0d 3a 6d 20 41 44 44 |..public|..:m ADD|
|000042e0| 3a 20 20 7b 20 61 64 64 | 4d 65 20 5c 20 77 68 72 |: { add|Me \ whr|
|000042f0| 20 5e 63 6c 61 73 73 20 | 2d 2d 20 7d 0d 09 67 65 | ^class |-- }..ge|
|00004300| 74 3a 20 73 69 7a 65 20 | 20 2d 3e 20 77 68 72 0d |t: size | -> whr.|
|00004310| 09 77 68 72 0d 09 4e 49 | 46 09 6e 69 6c 3f 3a 20 |.whr..NI|F.nil?: |
|00004320| 74 68 65 4c 69 73 74 0d | 09 09 49 46 09 09 38 30 |theList.|..IF..80|
|00004330| 20 20 6e 65 77 3a 20 74 | 68 65 4c 69 73 74 09 09 | new: t|heList..|
|00004340| 5c 20 47 69 76 65 20 69 | 74 20 72 6f 6f 6d 20 74 |\ Give i|t room t|
|00004350| 6f 20 70 6c 61 79 20 77 | 69 74 68 0d 09 09 45 4c |o play w|ith...EL|
|00004360| 53 45 09 38 30 20 20 73 | 65 74 73 69 7a 65 3a 20 |SE.80 s|etsize: |
|00004370| 74 68 65 4c 69 73 74 0d | 09 09 54 48 45 4e 0d 09 |theList.|..THEN..|
|00004380| 54 48 45 4e 0d 09 77 68 | 72 20 63 65 6c 6c 2b 20 |THEN..wh|r cell+ |
|00004390| 20 64 75 70 20 20 73 65 | 74 73 69 7a 65 3a 20 74 | dup se|tsize: t|
|000043a0| 68 65 4c 69 73 74 20 20 | 70 75 74 3a 20 73 69 7a |heList |put: siz|
|000043b0| 65 0d 09 77 68 72 20 20 | 28 73 65 6c 29 3a 20 73 |e..whr |(sel): s|
|000043c0| 65 6c 66 0d 09 61 64 64 | 4d 65 20 20 73 65 6c 66 |elf..add|Me self|
|000043d0| 20 21 0d 3b 6d 0d 0d 0d | 3a 6d 20 52 45 4d 4f 56 | !.;m...|:m REMOV|
|000043e0| 45 3a 20 20 7b 20 5c 20 | 77 68 72 20 63 6e 74 20 |E: { \ |whr cnt |
|000043f0| 2d 2d 20 7d 09 09 5c 20 | 43 6f 6d 70 6c 65 74 65 |-- }..\ |Complete|
|00004400| 6c 79 20 72 65 6d 6f 76 | 65 73 20 74 68 65 20 63 |ly remov|es the c|
|00004410| 75 72 72 65 6e 74 20 65 | 6c 65 6d 65 6e 74 2e 0d |urrent e|lement..|
|00004420| 09 70 74 72 3a 20 74 68 | 65 4c 69 73 74 20 20 67 |.ptr: th|eList g|
|00004430| 65 74 3a 20 70 6f 73 20 | 20 2b 20 20 2d 3e 20 77 |et: pos | + -> w|
|00004440| 68 72 0d 09 31 63 65 6c | 6c 20 20 2d 3a 20 73 69 |hr..1cel|l -: si|
|00004450| 7a 65 20 20 67 65 74 3a | 20 73 69 7a 65 20 20 67 |ze get:| size g|
|00004460| 65 74 3a 20 70 6f 73 20 | 20 2d 20 20 2d 3e 20 63 |et: pos | - -> c|
|00004470| 6e 74 0d 09 63 6e 74 20 | 49 46 20 20 77 68 72 20 |nt..cnt |IF whr |
|00004480| 63 65 6c 6c 2b 20 20 77 | 68 72 20 20 63 6e 74 20 |cell+ w|hr cnt |
|00004490| 20 6d 6f 76 65 20 20 54 | 48 45 4e 0d 09 09 09 09 | move T|HEN.....|
|000044a0| 09 5c 20 6e 6f 74 65 3a | 20 63 61 6e 27 74 20 75 |.\ note:| can't u|
|000044b0| 73 65 20 61 6c 69 67 6e | 65 64 5f 6d 6f 76 65 20 |se align|ed_move |
|000044c0| 73 69 6e 63 65 20 69 74 | 27 73 20 61 20 6d 6f 76 |since it|'s a mov|
|000044d0| 65 20 64 6f 77 6e 2c 0d | 09 09 09 09 09 5c 20 61 |e down,.|.....\ a|
|000044e0| 6e 64 20 6f 76 65 72 6c | 61 70 73 0d 09 67 65 74 |nd overl|aps..get|
|000044f0| 3a 20 70 6f 73 20 20 63 | 65 6c 6c 2d 20 20 30 20 |: pos c|ell- 0 |
|00004500| 6d 61 78 20 20 70 75 74 | 3a 20 70 6f 73 0d 09 70 |max put|: pos..p|
|00004510| 74 72 3a 20 74 68 65 4c | 69 73 74 20 20 67 65 74 |tr: theL|ist get|
|00004520| 3a 20 70 6f 73 20 20 2b | 20 20 40 20 20 73 65 6c |: pos +| @ sel|
|00004530| 66 20 21 09 5c 20 73 77 | 69 74 63 68 20 69 6e 20 |f !.\ sw|itch in |
|00004540| 6e 65 77 20 63 75 72 72 | 65 6e 74 20 65 6c 74 0d |new curr|ent elt.|
|00004550| 09 67 65 74 3a 20 73 69 | 7a 65 20 20 4e 49 46 20 |.get: si|ze NIF |
|00004560| 20 72 65 6c 65 61 73 65 | 3a 20 74 68 65 4c 69 73 | release|: theLis|
|00004570| 74 20 20 54 48 45 4e 20 | 20 3b 6d 0d 0d 0d 3a 6d |t THEN | ;m...:m|
|00004580| 20 53 45 4c 45 43 54 3a | 09 5c 20 28 20 6e 20 2d | SELECT:|.\ ( n -|
|00004590| 2d 20 29 0d 09 34 2a 20 | 20 30 20 20 67 65 74 3a |- )..4* | 0 get:|
|000045a0| 20 73 69 7a 65 20 63 65 | 6c 6c 2d 20 20 77 69 74 | size ce|ll- wit|
|000045b0| 68 69 6e 3f 20 6e 6f 74 | 20 20 3f 65 72 72 6f 72 |hin? not| ?error|
|000045c0| 20 31 33 34 0d 09 28 73 | 65 6c 29 3a 20 73 65 6c | 134..(s|el): sel|
|000045d0| 66 20 20 3b 6d 0d 0d 3a | 6d 20 53 45 4c 45 43 54 |f ;m..:|m SELECT|
|000045e0| 4c 41 53 54 3a 0d 09 67 | 65 74 3a 20 73 69 7a 65 |LAST:..g|et: size|
|000045f0| 20 20 63 65 6c 6c 2d 20 | 20 28 73 65 6c 29 3a 20 | cell- | (sel): |
|00004600| 73 65 6c 66 20 20 3b 6d | 0d 0d 3a 6d 20 43 55 52 |self ;m|..:m CUR|
|00004610| 52 45 4e 54 3a 09 67 65 | 74 3a 20 70 6f 73 20 20 |RENT:.ge|t: pos |
|00004620| 34 2f 20 20 3b 6d 0d 0d | 3a 6d 20 53 49 5a 45 3a |4/ ;m..|:m SIZE:|
|00004630| 09 67 65 74 3a 20 73 69 | 7a 65 20 34 2f 20 20 3b |.get: si|ze 4/ ;|
|00004640| 6d 0d 09 09 09 09 09 5c | 20 54 68 69 73 20 69 73 |m......\| This is|
|00004650| 20 74 68 65 20 6e 75 6d | 62 65 72 20 6f 66 20 69 | the num|ber of i|
|00004660| 74 65 6d 73 20 69 6e 20 | 74 68 65 20 6c 69 73 74 |tems in |the list|
|00004670| 2e 0d 0d 5c 20 54 68 65 | 20 6e 65 78 74 20 74 77 |...\ The| next tw|
|00004680| 6f 20 6d 65 74 68 6f 64 | 73 20 61 72 65 20 6e 65 |o method|s are ne|
|00004690| 65 64 65 64 20 62 79 20 | 45 41 43 48 3a 2c 20 62 |eded by |EACH:, b|
|000046a0| 75 74 20 6d 61 79 20 62 | 65 20 63 61 6c 6c 65 64 |ut may b|e called|
|000046b0| 20 64 69 72 65 63 74 6c | 79 20 61 73 20 77 65 6c | directl|y as wel|
|000046c0| 6c 2e 0d 5c 20 4e 6f 74 | 65 20 74 68 61 74 20 4e |l..\ Not|e that N|
|000046d0| 45 58 54 3f 3a 20 20 41 | 53 53 55 4d 45 53 20 74 |EXT?: A|SSUMES t|
|000046e0| 68 61 74 20 74 68 65 20 | 6c 69 73 74 20 69 73 20 |hat the |list is |
|000046f0| 61 6c 6c 6f 63 61 74 65 | 64 20 69 6e 20 74 68 65 |allocate|d in the|
|00004700| 20 68 65 61 70 20 61 6e | 64 20 74 68 61 74 20 61 | heap an|d that a|
|00004710| 0d 5c 20 76 61 6c 69 64 | 20 65 6c 65 6d 65 6e 74 |.\ valid| element|
|00004720| 20 69 73 20 73 65 6c 65 | 63 74 65 64 20 61 73 20 | is sele|cted as |
|00004730| 74 68 65 20 63 75 72 72 | 65 6e 74 20 65 6c 65 6d |the curr|ent elem|
|00004740| 65 6e 74 2e 20 20 45 41 | 43 48 3a 20 65 6e 73 75 |ent. EA|CH: ensu|
|00004750| 72 65 73 20 74 68 69 73 | 2c 0d 5c 20 73 69 6e 63 |res this|,.\ sinc|
|00004760| 65 20 69 66 20 46 49 52 | 53 54 3f 3a 20 72 65 74 |e if FIR|ST?: ret|
|00004770| 75 72 6e 73 20 66 61 6c | 73 65 2c 20 4e 45 58 54 |urns fal|se, NEXT|
|00004780| 3f 3a 20 69 73 20 6e 65 | 76 65 72 20 63 61 6c 6c |?: is ne|ver call|
|00004790| 65 64 2e 20 20 42 75 74 | 20 69 66 20 79 6f 75 20 |ed. But| if you |
|000047a0| 63 61 6c 6c 0d 5c 20 69 | 74 20 64 69 72 65 63 74 |call.\ i|t direct|
|000047b0| 6c 79 2c 20 6d 61 6b 65 | 20 73 75 72 65 20 74 68 |ly, make| sure th|
|000047c0| 69 73 20 63 6f 6e 64 69 | 74 69 6f 6e 20 68 6f 6c |is condi|tion hol|
|000047d0| 64 73 2e 0d 0d 3a 6d 20 | 46 49 52 53 54 3f 3a 09 |ds...:m |FIRST?:.|
|000047e0| 5c 20 28 20 2d 2d 20 6e | 20 54 20 7c 20 2d 2d 20 |\ ( -- n| T | -- |
|000047f0| 46 20 29 0d 09 6e 69 6c | 3f 3a 20 74 68 65 4c 69 |F )..nil|?: theLi|
|00004800| 73 74 20 20 49 46 20 20 | 66 61 6c 73 65 20 20 45 |st IF |false E|
|00004810| 58 49 54 20 20 54 48 45 | 4e 0d 09 30 20 28 73 65 |XIT THE|N..0 (se|
|00004820| 6c 29 3a 20 73 65 6c 66 | 20 20 73 65 6c 66 20 40 |l): self| self @|
|00004830| 20 20 74 72 75 65 20 20 | 3b 6d 0d 0d 3a 6d 20 4e | true |;m..:m N|
|00004840| 45 58 54 3f 3a 20 20 7b | 20 5c 20 6e 78 74 20 2d |EXT?: {| \ nxt -|
|00004850| 2d 20 6e 20 54 20 7c 20 | 2d 2d 20 46 20 7d 0d 09 |- n T | |-- F }..|
|00004860| 67 65 74 3a 20 70 6f 73 | 20 20 63 65 6c 6c 2b 20 |get: pos| cell+ |
|00004870| 20 2d 3e 20 6e 78 74 0d | 09 6e 78 74 20 20 67 65 | -> nxt.|.nxt ge|
|00004880| 74 3a 20 73 69 7a 65 20 | 20 3e 3d 20 49 46 20 20 |t: size | >= IF |
|00004890| 66 61 6c 73 65 20 20 45 | 58 49 54 20 20 54 48 45 |false E|XIT THE|
|000048a0| 4e 0d 09 6e 78 74 20 28 | 73 65 6c 29 3a 20 73 65 |N..nxt (|sel): se|
|000048b0| 6c 66 20 20 73 65 6c 66 | 20 40 20 20 74 72 75 65 |lf self| @ true|
|000048c0| 20 20 3b 6d 0d 0d 0d 3a | 6d 20 43 4c 45 41 52 3a | ;m...:|m CLEAR:|
|000048d0| 0d 09 63 6c 65 61 72 3a | 20 73 69 7a 65 20 20 63 |..clear:| size c|
|000048e0| 6c 65 61 72 3a 20 70 6f | 73 20 20 63 6c 65 61 72 |lear: po|s clear|
|000048f0| 3a 20 74 68 65 4c 69 73 | 74 20 20 3b 6d 0d 0d 0d |: theLis|t ;m...|
|00004900| 3a 6d 20 44 55 4d 50 41 | 4c 4c 3a 0d 09 6e 69 6c |:m DUMPA|LL:..nil|
|00004910| 3f 3a 20 74 68 65 4c 69 | 73 74 20 49 46 20 20 2e |?: theLi|st IF .|
|00004920| 22 20 28 6e 6f 74 20 6f | 70 65 6e 29 22 20 20 45 |" (not o|pen)" E|
|00004930| 58 49 54 20 20 54 48 45 | 4e 0d 09 64 75 6d 70 3a |XIT THE|N..dump:|
|00004940| 20 73 75 70 65 72 20 20 | 63 72 20 20 2e 22 20 63 | super |cr ." c|
|00004950| 75 72 72 65 6e 74 3a 20 | 22 20 20 63 75 72 72 65 |urrent: |" curre|
|00004960| 6e 74 3a 20 73 65 6c 66 | 20 20 64 75 70 20 2e 0d |nt: self| dup ..|
|00004970| 09 63 72 20 2e 22 20 65 | 6c 65 6d 65 6e 74 73 3a |.cr ." e|lements:|
|00004980| 20 22 20 20 63 72 0d 09 | 42 45 47 49 4e 20 20 65 | " cr..|BEGIN e|
|00004990| 61 63 68 3a 20 5b 73 65 | 6c 66 5d 20 20 57 48 49 |ach: [se|lf] WHI|
|000049a0| 4c 45 20 20 64 75 6d 70 | 3a 20 5b 73 65 6c 66 5d |LE dump|: [self]|
|000049b0| 20 20 52 45 50 45 41 54 | 0d 09 73 65 6c 65 63 74 | REPEAT|..select|
|000049c0| 3a 20 73 65 6c 66 20 20 | 3b 6d 0d 0d 3a 6d 20 50 |: self |;m..:m P|
|000049d0| 52 49 4e 54 41 4c 4c 3a | 0d 09 6e 69 6c 3f 3a 20 |RINTALL:|..nil?: |
|000049e0| 74 68 65 4c 69 73 74 20 | 49 46 20 20 2e 22 20 28 |theList |IF ." (|
|000049f0| 6e 6f 74 20 6f 70 65 6e | 29 22 20 20 45 58 49 54 |not open|)" EXIT|
|00004a00| 20 20 54 48 45 4e 0d 09 | 67 65 74 3a 20 70 6f 73 | THEN..|get: pos|
|00004a10| 0d 09 42 45 47 49 4e 20 | 20 65 61 63 68 3a 20 73 |..BEGIN | each: s|
|00004a20| 65 6c 66 20 20 57 48 49 | 4c 45 20 20 70 72 69 6e |elf WHI|LE prin|
|00004a30| 74 3a 20 5b 73 65 6c 66 | 5d 20 20 63 72 20 20 52 |t: [self|] cr R|
|00004a40| 45 50 45 41 54 0d 09 28 | 73 65 6c 29 3a 20 73 65 |EPEAT..(|sel): se|
|00004a50| 6c 66 20 20 3b 6d 0d 0d | 3b 63 6c 61 73 73 0d 0d |lf ;m..|;class..|
|00004a60| 0d 5c 20 4e 6f 77 20 72 | 61 74 68 65 72 20 6f 62 |.\ Now r|ather ob|
|00004a70| 73 6f 6c 65 74 65 20 2d | 20 6d 6f 76 65 64 20 74 |solete -| moved t|
|00004a80| 6f 20 53 74 72 75 63 74 | 31 0d 0d 28 2a 20 2a 2a |o Struct|1..(* **|
|00004a90| 2a 2a 2a 2a 2a 0d 3a 63 | 6c 61 73 73 09 48 41 4e |*****.:c|lass.HAN|
|00004aa0| 44 4c 45 41 52 52 41 59 | 20 20 73 75 70 65 72 7b |DLEARRAY| super{|
|00004ab0| 20 6f 62 6a 48 61 6e 64 | 6c 65 20 20 61 72 72 61 | objHand|le arra|
|00004ac0| 79 20 20 6f 62 6a 5f 61 | 72 72 61 79 20 7d 0d 0d |y obj_a|rray }..|
|00004ad0| 72 65 63 6f 72 64 0d 7b | 09 69 6e 74 09 73 69 7a |record.{|.int.siz|
|00004ae0| 65 20 20 7d 0d 0d 3a 6d | 20 53 49 5a 45 3a 09 09 |e }..:m| SIZE:..|
|00004af0| 67 65 74 3a 20 73 69 7a | 65 20 20 3b 6d 0d 3a 6d |get: siz|e ;m.:m|
|00004b00| 20 53 45 54 53 49 5a 45 | 3a 09 09 70 75 74 3a 20 | SETSIZE|:..put: |
|00004b10| 73 69 7a 65 20 20 3b 6d | 0d 0d 3a 6d 20 52 45 4c |size ;m|..:m REL|
|00004b20| 45 41 53 45 3a 0d 09 67 | 65 74 3a 20 73 69 7a 65 |EASE:..g|et: size|
|00004b30| 20 20 30 20 20 3f 44 4f | 0d 09 09 69 20 73 65 6c | 0 ?DO|...i sel|
|00004b40| 65 63 74 3a 20 73 65 6c | 66 20 20 72 65 6c 65 61 |ect: sel|f relea|
|00004b50| 73 65 4f 62 6a 3a 20 73 | 65 6c 66 0d 09 4c 4f 4f |seObj: s|elf..LOO|
|00004b60| 50 20 20 3b 6d 0d 0d 3a | 6d 20 50 55 53 48 3a 09 |P ;m..:|m PUSH:.|
|00004b70| 09 5c 20 28 20 68 64 6c | 20 2d 2d 20 29 0d 09 67 |.\ ( hdl| -- )..g|
|00004b80| 65 74 3a 20 73 69 7a 65 | 20 20 6c 69 6d 69 74 20 |et: size| limit |
|00004b90| 20 3e 3d 20 20 3f 65 72 | 72 6f 72 20 31 33 37 0d | >= ?er|ror 137.|
|00004ba0| 09 67 65 74 3a 20 73 69 | 7a 65 20 20 73 65 6c 65 |.get: si|ze sele|
|00004bb0| 63 74 3a 20 73 65 6c 66 | 20 20 31 20 2b 3a 20 73 |ct: self| 1 +: s|
|00004bc0| 69 7a 65 0d 09 70 75 74 | 3a 20 73 75 70 65 72 20 |ize..put|: super |
|00004bd0| 20 3b 6d 0d 0d 70 72 69 | 76 61 74 65 0d 3a 6d 20 | ;m..pri|vate.:m |
|00004be0| 28 54 4f 50 29 3a 0d 09 | 67 65 74 3a 20 73 69 7a |(TOP):..|get: siz|
|00004bf0| 65 20 20 64 75 70 0d 09 | 49 46 09 09 31 2d 20 20 |e dup..|IF..1- |
|00004c00| 73 65 6c 65 63 74 3a 20 | 73 65 6c 66 0d 09 45 4c |select: |self..EL|
|00004c10| 53 45 09 64 72 6f 70 20 | 20 63 6c 65 61 72 3a 20 |SE.drop | clear: |
|00004c20| 63 75 72 72 65 6e 74 0d | 09 54 48 45 4e 20 20 3b |current.|.THEN ;|
|00004c30| 6d 0d 70 75 62 6c 69 63 | 0d 0d 3a 6d 20 54 4f 50 |m.public|..:m TOP|
|00004c40| 3a 0d 09 67 65 74 3a 20 | 73 69 7a 65 20 20 30 3d |:..get: |size 0=|
|00004c50| 20 3f 65 72 72 6f 72 20 | 31 33 36 20 20 28 74 6f | ?error |136 (to|
|00004c60| 70 29 3a 20 73 65 6c 66 | 20 20 3b 6d 0d 0d 3a 6d |p): self| ;m..:m|
|00004c70| 20 44 52 4f 50 3a 0d 09 | 67 65 74 3a 20 73 69 7a | DROP:..|get: siz|
|00004c80| 65 20 20 64 75 70 20 20 | 30 3d 20 3f 65 72 72 6f |e dup |0= ?erro|
|00004c90| 72 20 31 33 36 0d 09 31 | 2d 20 20 73 65 6c 65 63 |r 136..1|- selec|
|00004ca0| 74 3a 20 73 65 6c 66 20 | 20 72 65 6c 65 61 73 65 |t: self | release|
|00004cb0| 4f 62 6a 3a 20 73 65 6c | 66 0d 09 31 20 2d 3a 20 |Obj: sel|f..1 -: |
|00004cc0| 73 69 7a 65 20 20 28 74 | 6f 70 29 3a 20 73 65 6c |size (t|op): sel|
|00004cd0| 66 20 20 3b 6d 0d 0d 3a | 6d 20 50 55 53 48 4e 45 |f ;m..:|m PUSHNE|
|00004ce0| 57 4f 42 4a 3a 0d 09 30 | 20 70 75 73 68 3a 20 73 |WOBJ:..0| push: s|
|00004cf0| 65 6c 66 20 20 6e 65 77 | 4f 62 6a 3a 20 73 65 6c |elf new|Obj: sel|
|00004d00| 66 20 20 3b 6d 0d 0d 3a | 6d 20 43 4c 45 41 52 58 |f ;m..:|m CLEARX|
|00004d10| 3a 09 6e 69 6c 48 20 20 | 66 69 6c 6c 3a 20 73 65 |:.nilH |fill: se|
|00004d20| 6c 66 20 20 3b 6d 0d 0d | 3a 6d 20 20 43 4c 41 53 |lf ;m..|:m CLAS|
|00004d30| 53 49 4e 49 54 3a 09 63 | 6c 65 61 72 58 3a 20 73 |SINIT:.c|learX: s|
|00004d40| 65 6c 66 20 20 63 6c 65 | 61 72 3a 20 73 65 6c 66 |elf cle|ar: self|
|00004d50| 20 20 3b 6d 0d 0d 3b 63 | 6c 61 73 73 0d 0d 2a 2a | ;m..;c|lass..**|
|00004d60| 2a 2a 2a 2a 2a 20 2a 29 | 0d 0d 28 2a 09 48 41 4e |***** *)|..(*.HAN|
|00004d70| 44 4c 45 4c 49 53 54 20 | 69 6d 70 6c 65 6d 65 6e |DLELIST |implemen|
|00004d80| 74 73 20 61 20 6c 69 73 | 74 20 6f 66 20 68 65 61 |ts a lis|t of hea|
|00004d90| 70 2d 62 61 73 65 64 20 | 6f 62 6a 65 63 74 73 2e |p-based |objects.|
|00004da0| 20 20 54 68 65 20 6c 69 | 73 74 20 63 61 6e 20 62 | The li|st can b|
|00004db0| 65 20 0d 09 6f 66 20 69 | 6e 64 65 66 69 6e 69 74 |e ..of i|ndefinit|
|00004dc0| 65 20 6c 65 6e 67 74 68 | 2e 20 20 57 65 20 75 73 |e length|. We us|
|00004dd0| 65 20 61 20 68 65 61 70 | 20 62 6c 6f 63 6b 20 74 |e a heap| block t|
|00004de0| 6f 20 73 74 6f 72 65 20 | 74 68 65 20 68 61 6e 64 |o store |the hand|
|00004df0| 6c 65 73 20 74 6f 20 0d | 09 74 68 65 20 6f 62 6a |les to .|.the obj|
|00004e00| 65 63 74 73 20 63 6f 6e | 74 69 67 75 6f 75 73 6c |ects con|tiguousl|
|00004e10| 79 2c 20 72 61 74 68 65 | 72 20 74 68 61 6e 20 68 |y, rathe|r than h|
|00004e20| 61 76 65 20 61 20 73 65 | 70 61 72 61 74 65 20 62 |ave a se|parate b|
|00004e30| 6c 6f 63 6b 20 66 6f 72 | 20 65 61 63 68 20 0d 09 |lock for| each ..|
|00004e40| 68 61 6e 64 6c 65 20 61 | 6e 64 20 6c 69 6e 6b 20 |handle a|nd link |
|00004e50| 74 68 65 6d 20 74 6f 67 | 65 74 68 65 72 2e 20 20 |them tog|ether. |
|00004e60| 54 68 69 73 20 73 61 76 | 65 73 20 6f 6e 20 6d 65 |This sav|es on me|
|00004e70| 6d 6f 72 79 20 6f 76 65 | 72 68 65 61 64 20 61 6e |mory ove|rhead an|
|00004e80| 64 20 72 65 64 75 63 65 | 73 20 0d 09 74 68 65 20 |d reduce|s ..the |
|00004e90| 6e 75 6d 62 65 72 20 6f | 66 20 6d 65 6d 6f 72 79 |number o|f memory|
|00004ea0| 20 6d 61 6e 61 67 65 72 | 20 63 61 6c 6c 73 2e 20 | manager| calls. |
|00004eb0| 20 49 74 20 61 6c 73 6f | 20 72 65 66 6c 65 63 74 | It also| reflect|
|00004ec0| 73 20 74 68 65 20 61 73 | 73 75 6d 70 74 69 6f 6e |s the as|sumption|
|00004ed0| 20 0d 09 74 68 61 74 20 | 69 6e 73 65 72 74 69 6f | ..that |insertio|
|00004ee0| 6e 73 20 61 6e 64 20 64 | 65 6c 65 74 69 6f 6e 73 |ns and d|eletions|
|00004ef0| 20 69 6e 74 6f 20 74 68 | 65 20 6d 69 64 64 6c 65 | into th|e middle|
|00004f00| 20 6f 66 20 74 68 65 20 | 6c 69 73 74 20 77 69 6c | of the |list wil|
|00004f10| 6c 20 62 65 20 0d 09 63 | 6f 6d 70 61 72 61 74 69 |l be ..c|omparati|
|00004f20| 76 65 6c 79 2c 20 69 6e | 66 72 65 71 75 65 6e 74 |vely, in|frequent|
|00004f30| 2c 20 61 73 20 74 68 65 | 73 65 20 63 6f 75 6c 64 |, as the|se could|
|00004f40| 20 62 65 20 6d 6f 72 65 | 20 69 6e 65 66 66 69 63 | be more| ineffic|
|00004f50| 69 65 6e 74 20 74 68 61 | 6e 20 77 69 74 68 0d 09 |ient tha|n with..|
|00004f60| 61 20 6c 69 6e 6b 65 64 | 20 73 63 68 65 6d 65 2e |a linked| scheme.|
|00004f70| 20 20 57 65 20 65 78 70 | 65 63 74 20 74 68 61 74 | We exp|ect that|
|00004f80| 20 65 6c 65 6d 65 6e 74 | 73 20 77 69 6c 6c 20 6e | element|s will n|
|00004f90| 6f 72 6d 61 6c 6c 79 20 | 62 65 20 61 64 64 65 64 |ormally |be added|
|00004fa0| 20 74 6f 20 74 68 65 0d | 09 65 6e 64 2c 20 61 6e | to the.|.end, an|
|00004fb0| 64 20 70 72 6f 62 61 62 | 6c 79 20 6e 6f 74 20 72 |d probab|ly not r|
|00004fc0| 65 6d 6f 76 65 64 20 61 | 74 20 61 6c 6c 2c 20 6f |emoved a|t all, o|
|00004fd0| 72 20 6e 6f 74 20 76 65 | 72 79 20 6f 66 74 65 6e |r not ve|ry often|
|00004fe0| 2e 0d 2a 29 0d 0d 3a 63 | 6c 61 73 73 20 20 48 41 |..*)..:c|lass HA|
|00004ff0| 4e 44 4c 45 4c 49 53 54 | 20 20 73 75 70 65 72 7b |NDLELIST| super{|
|00005000| 20 6f 62 6a 48 61 6e 64 | 6c 65 20 28 50 48 6c 69 | objHand|le (PHli|
|00005010| 73 74 29 20 7d 0d 0d 5c | 20 46 49 52 53 54 3f 3a |st) }..\| FIRST?:|
|00005020| 20 61 6e 64 20 4e 45 58 | 54 3f 3a 2c 20 6e 65 65 | and NEX|T?:, nee|
|00005030| 64 65 64 20 66 6f 72 20 | 74 68 65 20 45 41 43 48 |ded for |the EACH|
|00005040| 3a 20 63 6f 6e 73 74 72 | 75 63 74 69 6f 6e 2c 20 |: constr|uction, |
|00005050| 61 72 65 20 6f 76 65 72 | 72 69 64 64 65 6e 20 68 |are over|ridden h|
|00005060| 65 72 65 0d 5c 20 73 69 | 6e 63 65 20 69 66 20 74 |ere.\ si|nce if t|
|00005070| 68 65 20 6e 65 78 74 20 | 65 6c 65 6d 65 6e 74 20 |he next |element |
|00005080| 65 78 69 73 74 73 20 77 | 65 20 72 65 74 75 72 6e |exists w|e return|
|00005090| 20 74 68 65 20 6f 62 6a | 65 63 74 20 61 64 64 72 | the obj|ect addr|
|000050a0| 65 73 73 20 61 73 20 77 | 65 6c 6c 20 61 73 0d 5c |ess as w|ell as.\|
|000050b0| 20 74 68 65 20 54 72 75 | 65 2e 20 20 57 65 20 61 | the Tru|e. We a|
|000050c0| 6c 73 6f 20 6e 65 65 64 | 20 74 6f 20 75 6e 6c 6f |lso need| to unlo|
|000050d0| 63 6b 20 74 68 65 20 70 | 72 65 76 69 6f 75 73 20 |ck the p|revious |
|000050e0| 6f 62 6a 48 61 6e 64 6c | 65 20 77 68 65 6e 20 77 |objHandl|e when w|
|000050f0| 65 20 73 74 65 70 0d 5c | 20 74 6f 20 74 68 65 20 |e step.\| to the |
|00005100| 6e 65 78 74 20 6f 6e 65 | 2e 0d 0d 3a 6d 20 53 49 |next one|...:m SI|
|00005110| 5a 45 3a 09 5c 20 57 65 | 27 72 65 20 6f 76 65 72 |ZE:.\ We|'re over|
|00005120| 72 69 64 69 6e 67 20 68 | 65 72 65 20 73 69 6e 63 |riding h|ere sinc|
|00005130| 65 20 6f 62 6a 48 61 6e | 64 6c 65 20 68 61 73 20 |e objHan|dle has |
|00005140| 61 20 73 69 7a 65 3a 20 | 6d 65 74 68 6f 64 0d 09 |a size: |method..|
|00005150| 09 09 5c 20 20 77 68 69 | 63 68 20 69 73 6e 27 74 |..\ whi|ch isn't|
|00005160| 20 72 65 61 6c 6c 79 20 | 75 73 65 66 75 6c 20 68 | really |useful h|
|00005170| 65 72 65 0d 09 73 69 7a | 65 3a 20 73 75 70 65 72 |ere..siz|e: super|
|00005180| 3e 20 28 50 48 6c 69 73 | 74 29 20 20 3b 6d 0d 0d |> (PHlis|t) ;m..|
|00005190| 3a 6d 20 46 49 52 53 54 | 3f 3a 09 5c 20 28 20 2d |:m FIRST|?:.\ ( -|
|000051a0| 2d 20 5e 6f 62 6a 20 54 | 20 7c 20 2d 2d 20 46 20 |- ^obj T| | -- F |
|000051b0| 29 0d 09 66 69 72 73 74 | 3f 3a 20 73 75 70 65 72 |)..first|?: super|
|000051c0| 20 20 4e 49 46 20 20 66 | 61 6c 73 65 20 20 45 58 | NIF f|alse EX|
|000051d0| 49 54 20 20 54 48 45 4e | 0d 09 64 72 6f 70 20 20 |IT THEN|..drop |
|000051e0| 6f 62 6a 3a 20 73 65 6c | 66 20 20 74 72 75 65 20 |obj: sel|f true |
|000051f0| 20 3b 6d 0d 0d 3a 6d 20 | 4e 45 58 54 3f 3a 20 20 | ;m..:m |NEXT?: |
|00005200| 7b 20 5c 20 6e 78 74 20 | 2d 2d 20 5e 6f 62 6a 20 |{ \ nxt |-- ^obj |
|00005210| 54 20 7c 20 2d 2d 20 46 | 20 7d 0d 09 75 6e 6c 6f |T | -- F| }..unlo|
|00005220| 63 6b 3a 20 73 75 70 65 | 72 0d 09 6e 65 78 74 3f |ck: supe|r..next?|
|00005230| 3a 20 73 75 70 65 72 20 | 20 4e 49 46 20 20 66 61 |: super | NIF fa|
|00005240| 6c 73 65 20 20 45 58 49 | 54 20 20 54 48 45 4e 0d |lse EXI|T THEN.|
|00005250| 09 64 72 6f 70 20 20 6f | 62 6a 3a 20 73 65 6c 66 |.drop o|bj: self|
|00005260| 20 20 74 72 75 65 20 20 | 3b 6d 0d 0d 0d 3a 6d 20 | true |;m...:m |
|00005270| 4e 45 57 4f 42 4a 3a 09 | 5c 20 28 20 5e 63 6c 61 |NEWOBJ:.|\ ( ^cla|
|00005280| 73 73 20 2d 2d 20 29 0d | 09 6e 69 6c 48 20 20 61 |ss -- ).|.nilH a|
|00005290| 64 64 3a 20 73 75 70 65 | 72 3e 20 28 50 48 6c 69 |dd: supe|r> (PHli|
|000052a0| 73 74 29 0d 09 6e 65 77 | 4f 62 6a 3a 20 73 75 70 |st)..new|Obj: sup|
|000052b0| 65 72 20 20 3b 6d 0d 0d | 3a 6d 20 52 45 4d 4f 56 |er ;m..|:m REMOV|
|000052c0| 45 4f 42 4a 3a 09 09 09 | 5c 20 43 6f 6d 70 6c 65 |EOBJ:...|\ Comple|
|000052d0| 74 65 6c 79 20 72 65 6d | 6f 76 65 73 20 74 68 65 |tely rem|oves the|
|000052e0| 20 63 75 72 72 65 6e 74 | 20 65 6c 65 6d 65 6e 74 | current| element|
|000052f0| 2e 0d 09 72 65 6c 65 61 | 73 65 4f 62 6a 3a 20 73 |...relea|seObj: s|
|00005300| 75 70 65 72 20 20 72 65 | 6d 6f 76 65 3a 20 73 75 |uper re|move: su|
|00005310| 70 65 72 20 20 3b 6d 0d | 0d 5c 20 54 68 65 73 65 |per ;m.|.\ These|
|00005320| 20 6e 65 78 74 20 6d 65 | 74 68 6f 64 73 20 74 72 | next me|thods tr|
|00005330| 65 61 74 20 74 68 65 20 | 6c 69 73 74 20 61 73 20 |eat the |list as |
|00005340| 61 20 73 74 61 63 6b 2e | 20 20 54 68 69 73 20 69 |a stack.| This i|
|00005350| 73 20 75 73 65 64 20 62 | 79 0d 5c 20 20 66 69 6c |s used b|y.\ fil|
|00005360| 65 4c 69 73 74 2e 0d 0d | 70 72 69 76 61 74 65 0d |eList...|private.|
|00005370| 3a 6d 20 28 54 4f 50 29 | 3a 0d 09 73 69 7a 65 3a |:m (TOP)|:..size:|
|00005380| 20 73 65 6c 66 20 20 64 | 75 70 0d 09 49 46 09 09 | self d|up..IF..|
|00005390| 31 2d 20 20 73 65 6c 65 | 63 74 3a 20 73 65 6c 66 |1- sele|ct: self|
|000053a0| 0d 09 45 4c 53 45 09 64 | 72 6f 70 20 20 63 6c 65 |..ELSE.d|rop cle|
|000053b0| 61 72 3a 20 70 6f 73 0d | 09 54 48 45 4e 20 20 3b |ar: pos.|.THEN ;|
|000053c0| 6d 0d 70 75 62 6c 69 63 | 0d 0d 3a 6d 20 54 4f 50 |m.public|..:m TOP|
|000053d0| 3a 0d 09 67 65 74 3a 20 | 73 69 7a 65 20 20 4e 49 |:..get: |size NI|
|000053e0| 46 20 20 31 33 36 20 64 | 69 65 20 20 54 48 45 4e |F 136 d|ie THEN|
|000053f0| 09 09 09 5c 20 49 6e 64 | 65 78 20 6f 75 74 20 6f |...\ Ind|ex out o|
|00005400| 66 20 72 61 6e 67 65 0d | 09 28 74 6f 70 29 3a 20 |f range.|.(top): |
|00005410| 73 65 6c 66 20 20 3b 6d | 0d 0d 3a 6d 20 44 52 4f |self ;m|..:m DRO|
|00005420| 50 3a 0d 09 73 69 7a 65 | 3a 20 73 65 6c 66 20 20 |P:..size|: self |
|00005430| 64 75 70 20 20 4e 49 46 | 20 20 31 33 36 20 64 69 |dup NIF| 136 di|
|00005440| 65 20 20 54 48 45 4e 0d | 09 31 2d 20 20 73 65 6c |e THEN.|.1- sel|
|00005450| 65 63 74 3a 20 73 65 6c | 66 20 20 72 65 6d 6f 76 |ect: sel|f remov|
|00005460| 65 4f 62 6a 3a 20 73 65 | 6c 66 0d 09 28 74 6f 70 |eObj: se|lf..(top|
|00005470| 29 3a 20 73 65 6c 66 20 | 20 3b 6d 0d 0d 3a 6d 20 |): self | ;m..:m |
|00005480| 50 55 53 48 4e 45 57 4f | 42 4a 3a 09 5c 20 28 20 |PUSHNEWO|BJ:.\ ( |
|00005490| 5e 63 6c 61 73 73 20 2d | 2d 20 29 0d 09 6e 65 77 |^class -|- )..new|
|000054a0| 4f 62 6a 3a 20 73 65 6c | 66 0d 3b 6d 0d 0d 0d 3a |Obj: sel|f.;m...:|
|000054b0| 6d 20 52 45 4c 45 41 53 | 45 3a 0d 09 42 45 47 49 |m RELEAS|E:..BEGI|
|000054c0| 4e 20 20 65 61 63 68 3a | 20 73 65 6c 66 20 20 57 |N each:| self W|
|000054d0| 48 49 4c 45 20 20 64 72 | 6f 70 20 20 72 65 6c 65 |HILE dr|op rele|
|000054e0| 61 73 65 4f 62 6a 3a 20 | 73 75 70 65 72 20 20 52 |aseObj: |super R|
|000054f0| 45 50 45 41 54 0d 09 72 | 65 6c 65 61 73 65 3a 20 |EPEAT..r|elease: |
|00005500| 74 68 65 4c 69 73 74 0d | 09 63 6c 65 61 72 3a 20 |theList.|.clear: |
|00005510| 70 6f 73 20 20 63 6c 65 | 61 72 3a 20 73 69 7a 65 |pos cle|ar: size|
|00005520| 20 20 3b 6d 0d 0d 0d 3a | 6d 20 43 4c 45 41 52 3a | ;m...:|m CLEAR:|
|00005530| 0d 09 63 6c 65 61 72 3a | 20 73 75 70 65 72 3e 20 |..clear:| super> |
|00005540| 28 50 48 6c 69 73 74 29 | 20 20 63 6c 65 61 72 3a |(PHlist)| clear:|
|00005550| 20 73 75 70 65 72 3e 20 | 6f 62 6a 48 61 6e 64 6c | super> |objHandl|
|00005560| 65 20 20 3b 6d 0d 0d 0d | 28 2a 09 46 6f 72 20 53 |e ;m...|(*.For S|
|00005570| 45 4e 44 3a 20 61 6e 64 | 20 42 52 49 4e 47 3a 2c |END: and| BRING:,|
|00005580| 20 77 65 20 66 69 72 73 | 74 20 73 65 6e 64 20 32 | we firs|t send 2|
|00005590| 20 62 79 74 65 73 20 77 | 69 74 68 20 74 68 65 20 | bytes w|ith the |
|000055a0| 6e 75 6d 62 65 72 0d 09 | 6f 66 20 69 74 65 6d 73 |number..|of items|
|000055b0| 2c 20 74 68 65 6e 20 73 | 65 6c 65 63 74 3a 20 65 |, then s|elect: e|
|000055c0| 61 63 68 20 69 74 65 6d | 20 61 6e 64 20 73 65 6e |ach item| and sen|
|000055d0| 64 20 73 65 6e 64 3a 20 | 74 6f 20 69 74 2e 0d 09 |d send: |to it...|
|000055e0| 57 65 20 75 73 65 20 61 | 20 73 70 65 63 69 61 6c |We use a| special|
|000055f0| 20 32 2d 62 79 74 65 20 | 6d 61 72 6b 65 72 20 62 | 2-byte |marker b|
|00005600| 65 74 77 65 65 6e 20 65 | 61 63 68 20 6f 66 20 74 |etween e|ach of t|
|00005610| 68 65 73 65 20 6f 62 6a | 65 63 74 73 0d 09 77 65 |hese obj|ects..we|
|00005620| 20 73 65 6e 64 20 74 6f | 20 74 68 65 20 73 74 72 | send to| the str|
|00005630| 65 61 6d 2c 20 73 6f 20 | 74 68 61 74 20 42 52 49 |eam, so |that BRI|
|00005640| 4e 47 3a 20 63 61 6e 20 | 63 68 65 63 6b 20 74 68 |NG: can |check th|
|00005650| 61 74 20 77 65 0d 09 68 | 61 76 65 6e 27 74 20 67 |at we..h|aven't g|
|00005660| 6f 74 20 6f 75 74 20 6f | 66 20 73 79 6e 63 2e 0d |ot out o|f sync..|
|00005670| 2a 29 0d 0d 3a 6d 20 53 | 45 4e 44 3a 20 20 7b 20 |*)..:m S|END: { |
|00005680| 73 74 72 65 61 6d 20 2d | 2d 20 7d 0d 09 6e 69 6c |stream -|- }..nil|
|00005690| 3f 3a 20 74 68 65 4c 69 | 73 74 20 49 46 20 20 2d |?: theLi|st IF -|
|000056a0| 31 20 20 45 4c 53 45 20 | 20 73 69 7a 65 3a 20 73 |1 ELSE | size: s|
|000056b0| 65 6c 66 20 20 54 48 45 | 4e 20 20 70 61 64 20 77 |elf THE|N pad w|
|000056c0| 21 0d 09 70 61 64 20 32 | 20 77 72 69 74 65 3a 20 |!..pad 2| write: |
|000056d0| 5b 20 73 74 72 65 61 6d | 20 5d 20 20 4f 4b 3f 0d |[ stream| ] OK?.|
|000056e0| 0d 09 67 65 74 3a 20 70 | 6f 73 09 09 09 5c 20 73 |..get: p|os...\ s|
|000056f0| 61 76 65 20 77 68 65 72 | 65 20 77 65 20 61 72 65 |ave wher|e we are|
|00005700| 0d 09 67 65 74 3a 20 73 | 69 7a 65 20 20 30 0d 09 |..get: s|ize 0..|
|00005710| 3f 44 4f 0d 09 09 69 20 | 28 73 65 6c 29 3a 20 73 |?DO...i |(sel): s|
|00005720| 75 70 65 72 0d 09 09 73 | 74 72 65 61 6d 20 20 73 |uper...s|tream s|
|00005730| 65 6e 64 3a 20 73 75 70 | 65 72 3e 20 6f 62 6a 48 |end: sup|er> objH|
|00005740| 61 6e 64 6c 65 0d 09 09 | 24 20 66 65 65 64 20 20 |andle...|$ feed |
|00005750| 70 61 64 20 77 21 20 20 | 70 61 64 20 32 20 77 72 |pad w! |pad 2 wr|
|00005760| 69 74 65 3a 20 5b 20 73 | 74 72 65 61 6d 20 5d 20 |ite: [ s|tream ] |
|00005770| 20 4f 4b 3f 0d 09 31 63 | 65 6c 6c 20 2b 4c 4f 4f | OK?..1c|ell +LOO|
|00005780| 50 0d 09 0d 09 28 73 65 | 6c 29 3a 20 73 75 70 65 |P....(se|l): supe|
|00005790| 72 09 09 09 5c 20 72 65 | 73 74 6f 72 65 0d 3b 6d |r...\ re|store.;m|
|000057a0| 0d 0d 0d 3a 6d 20 42 52 | 49 4e 47 3a 20 20 7b 20 |...:m BR|ING: { |
|000057b0| 73 74 72 65 61 6d 20 5c | 20 23 69 74 65 6d 73 20 |stream \| #items |
|000057c0| 73 69 7a 65 20 2d 2d 20 | 7d 0d 09 72 65 6c 65 61 |size -- |}..relea|
|000057d0| 73 65 3a 20 73 65 6c 66 | 09 09 09 5c 20 77 68 61 |se: self|...\ wha|
|000057e0| 74 65 76 65 72 20 77 61 | 73 20 74 68 65 72 65 2c |tever wa|s there,|
|000057f0| 20 77 65 27 72 65 20 61 | 62 6f 75 74 20 74 6f 20 | we're a|bout to |
|00005800| 63 6c 6f 62 62 65 72 20 | 69 74 21 0d 09 63 6c 65 |clobber |it!..cle|
|00005810| 61 72 3a 20 73 69 7a 65 | 20 20 63 6c 65 61 72 3a |ar: size| clear:|
|00005820| 20 70 6f 73 0d 0d 09 70 | 61 64 20 32 20 72 65 61 | pos...p|ad 2 rea|
|00005830| 64 3a 20 5b 20 73 74 72 | 65 61 6d 20 5d 20 20 4f |d: [ str|eam ] O|
|00005840| 4b 3f 0d 09 70 61 64 20 | 77 40 78 20 2d 3e 20 23 |K?..pad |w@x -> #|
|00005850| 69 74 65 6d 73 0d 09 23 | 69 74 65 6d 73 20 30 3c |items..#|items 0<|
|00005860| 20 20 3f 45 58 49 54 09 | 09 5c 20 2d 31 20 6d 65 | ?EXIT.|.\ -1 me|
|00005870| 61 6e 73 20 6c 69 73 74 | 20 77 61 73 20 6e 69 6c |ans list| was nil|
|00005880| 2c 20 73 6f 20 77 65 20 | 6c 65 61 76 65 20 69 74 |, so we |leave it|
|00005890| 20 74 68 61 74 20 77 61 | 79 0d 09 0d 09 23 69 74 | that wa|y....#it|
|000058a0| 65 6d 73 20 63 65 6c 6c | 73 20 20 2d 3e 20 73 69 |ems cell|s -> si|
|000058b0| 7a 65 0d 09 73 69 7a 65 | 20 20 70 75 74 3a 20 73 |ze..size| put: s|
|000058c0| 69 7a 65 0d 09 73 69 7a | 65 20 20 6e 65 77 3a 20 |ize..siz|e new: |
|000058d0| 74 68 65 4c 69 73 74 0d | 09 73 69 7a 65 20 30 0d |theList.|.size 0.|
|000058e0| 09 3f 44 4f 0d 09 09 69 | 20 28 73 65 6c 29 3a 20 |.?DO...i| (sel): |
|000058f0| 73 75 70 65 72 0d 09 09 | 6e 69 6c 48 20 5e 62 61 |super...|nilH ^ba|
|00005900| 73 65 20 21 09 09 5c 20 | 64 6f 6e 27 74 20 77 61 |se !..\ |don't wa|
|00005910| 6e 74 20 6f 62 6a 48 61 | 6e 64 6c 65 20 74 6f 20 |nt objHa|ndle to |
|00005920| 74 72 79 20 72 65 6c 65 | 61 73 65 3a 20 6f 6e 20 |try rele|ase: on |
|00005930| 67 61 72 62 61 67 65 21 | 0d 09 09 73 74 72 65 61 |garbage!|...strea|
|00005940| 6d 20 20 62 72 69 6e 67 | 3a 20 73 75 70 65 72 3e |m bring|: super>|
|00005950| 20 6f 62 6a 48 61 6e 64 | 6c 65 0d 09 09 70 61 64 | objHand|le...pad|
|00005960| 20 32 20 72 65 61 64 3a | 20 5b 20 73 74 72 65 61 | 2 read:| [ strea|
|00005970| 6d 20 5d 20 20 4f 4b 3f | 0d 09 09 70 61 64 20 77 |m ] OK?|...pad w|
|00005980| 40 20 20 24 20 66 65 65 | 64 20 3c 3e 20 20 49 46 |@ $ fee|d <> IF|
|00005990| 20 20 2e 22 20 6f 68 20 | 6e 6f 6f 6f 6f 21 21 22 | ." oh |noooo!!"|
|000059a0| 20 71 75 69 74 20 20 54 | 48 45 4e 0d 09 31 63 65 | quit T|HEN..1ce|
|000059b0| 6c 6c 20 2b 4c 4f 4f 50 | 0d 3b 6d 0d 0d 3a 6d 20 |ll +LOOP|.;m..:m |
|000059c0| 44 55 4d 50 41 4c 4c 3a | 0d 09 6e 69 6c 3f 3a 20 |DUMPALL:|..nil?: |
|000059d0| 74 68 65 4c 69 73 74 20 | 69 66 20 20 2e 22 20 28 |theList |if ." (|
|000059e0| 6e 6f 74 20 6f 70 65 6e | 29 22 20 20 45 58 49 54 |not open|)" EXIT|
|000059f0| 20 20 54 48 45 4e 0d 09 | 64 75 6d 70 3a 20 73 75 | THEN..|dump: su|
|00005a00| 70 65 72 20 20 63 72 20 | 20 2e 22 20 63 75 72 72 |per cr | ." curr|
|00005a10| 65 6e 74 3a 20 22 20 20 | 67 65 74 3a 20 70 6f 73 |ent: " |get: pos|
|00005a20| 20 20 64 75 70 20 34 2f | 20 2e 0d 09 63 72 20 2e | dup 4/| ...cr .|
|00005a30| 22 20 65 6c 65 6d 65 6e | 74 73 3a 20 22 20 20 63 |" elemen|ts: " c|
|00005a40| 72 0d 09 42 45 47 49 4e | 20 20 65 61 63 68 3a 20 |r..BEGIN| each: |
|00005a50| 73 65 6c 66 20 20 57 48 | 49 4c 45 20 20 64 75 6d |self WH|ILE dum|
|00005a60| 70 3a 20 5b 5d 20 20 52 | 45 50 45 41 54 0d 09 28 |p: [] R|EPEAT..(|
|00005a70| 73 65 6c 29 3a 20 73 65 | 6c 66 20 20 20 3b 6d 0d |sel): se|lf ;m.|
|00005a80| 0d 3a 6d 20 50 52 49 4e | 54 41 4c 4c 3a 0d 09 6e |.:m PRIN|TALL:..n|
|00005a90| 69 6c 3f 3a 20 74 68 65 | 4c 69 73 74 20 69 66 20 |il?: the|List if |
|00005aa0| 20 2e 22 20 28 6e 6f 74 | 20 6f 70 65 6e 29 22 20 | ." (not| open)" |
|00005ab0| 20 45 58 49 54 20 20 54 | 48 45 4e 0d 09 67 65 74 | EXIT T|HEN..get|
|00005ac0| 3a 20 70 6f 73 0d 09 42 | 45 47 49 4e 20 20 65 61 |: pos..B|EGIN ea|
|00005ad0| 63 68 3a 20 73 65 6c 66 | 20 20 57 48 49 4c 45 20 |ch: self| WHILE |
|00005ae0| 20 70 72 69 6e 74 3a 20 | 5b 5d 20 20 63 72 20 20 | print: |[] cr |
|00005af0| 52 45 50 45 41 54 0d 09 | 28 73 65 6c 29 3a 20 73 |REPEAT..|(sel): s|
|00005b00| 65 6c 66 20 20 3b 6d 0d | 09 0d 3b 63 6c 61 73 73 |elf ;m.|..;class|
|00005b10| 0d 0d 0d 3a 63 6c 61 73 | 73 20 50 54 52 4c 49 53 |...:clas|s PTRLIS|
|00005b20| 54 20 20 73 75 70 65 72 | 7b 20 70 74 72 20 28 50 |T super|{ ptr (P|
|00005b30| 48 6c 69 73 74 29 20 7d | 0d 0d 3b 63 6c 61 73 73 |Hlist) }|..;class|
|00005b40| 0d 0d 0d 5c 09 09 09 3d | 3d 3d 3d 3d 3d 3d 3d 3d |...\...=|========|
|00005b50| 3d 3d 3d 3d 3d 20 43 6f | 6c 6c 65 63 74 69 6f 6e |===== Co|llection|
|00005b60| 73 20 3d 3d 3d 3d 3d 3d | 3d 3d 3d 3d 3d 3d 3d 3d |s ======|========|
|00005b70| 3d 3d 0d 0d 5c 20 43 6f | 6c 6c 65 63 74 69 6f 6e |==..\ Co|llection|
|00005b80| 73 20 61 72 65 20 6f 72 | 64 65 72 65 64 20 6c 69 |s are or|dered li|
|00005b90| 73 74 73 20 77 69 74 68 | 20 61 20 63 75 72 72 65 |sts with| a curre|
|00005ba0| 6e 74 20 73 69 7a 65 2e | 20 20 57 65 20 69 6d 70 |nt size.| We imp|
|00005bb0| 6c 65 6d 65 6e 74 20 74 | 68 65 6d 20 62 79 0d 5c |lement t|hem by.\|
|00005bc0| 20 6d 75 6c 74 69 70 6c | 79 20 69 6e 68 65 72 69 | multipl|y inheri|
|00005bd0| 74 69 6e 67 20 74 68 65 | 20 67 65 6e 65 72 69 63 |ting the| generic|
|00005be0| 20 28 43 4f 4c 29 20 63 | 6c 61 73 73 20 77 69 74 | (COL) c|lass wit|
|00005bf0| 68 20 74 68 65 20 61 72 | 72 61 79 20 63 6c 61 73 |h the ar|ray clas|
|00005c00| 73 20 6f 66 20 74 68 65 | 0d 5c 20 61 70 70 72 6f |s of the|.\ appro|
|00005c10| 70 72 69 61 74 65 20 77 | 69 64 74 68 2e 20 20 57 |priate w|idth. W|
|00005c20| 65 20 75 73 65 20 61 20 | 66 65 77 20 74 72 69 63 |e use a |few tric|
|00005c30| 6b 73 20 74 6f 20 61 76 | 6f 69 64 20 6c 61 74 65 |ks to av|oid late|
|00005c40| 20 62 69 6e 64 69 6e 67 | 20 74 6f 20 73 65 6c 66 | binding| to self|
|00005c50| 0d 5c 20 69 6e 20 6c 6f | 6f 70 73 2e 0d 0d 3a 63 |.\ in lo|ops...:c|
|00005c60| 6c 61 73 73 09 28 43 4f | 4c 29 20 20 73 75 70 65 |lass.(CO|L) supe|
|00005c70| 72 7b 20 6f 62 6a 65 63 | 74 20 7d 0d 0d 72 65 63 |r{ objec|t }..rec|
|00005c80| 6f 72 64 0d 7b 09 69 6e | 74 09 53 49 5a 45 09 7d |ord.{.in|t.SIZE.}|
|00005c90| 09 09 09 5c 20 23 20 65 | 6c 65 6d 65 6e 74 73 20 |...\ # e|lements |
|00005ca0| 69 6e 20 6c 69 73 74 0d | 20 0d 3a 6d 20 53 49 5a |in list.| .:m SIZ|
|00005cb0| 45 3a 09 5c 20 28 20 2d | 2d 20 63 75 72 73 69 7a |E:.\ ( -|- cursiz|
|00005cc0| 65 20 29 20 20 52 65 74 | 75 72 6e 73 20 23 65 6c |e ) Ret|urns #el|
|00005cd0| 65 6d 65 6e 74 73 20 63 | 75 72 72 65 6e 74 6c 79 |ements c|urrently|
|00005ce0| 20 69 6e 20 6c 69 73 74 | 0d 09 20 69 6e 6c 69 6e | in list|.. inlin|
|00005cf0| 65 7b 20 67 65 74 3a 20 | 73 69 7a 65 7d 20 20 67 |e{ get: |size} g|
|00005d00| 65 74 3a 20 73 69 7a 65 | 20 20 3b 6d 0d 0d 3a 6d |et: size| ;m..:m|
|00005d10| 20 43 4c 45 41 52 3a 09 | 5c 20 53 65 74 20 74 6f | CLEAR:.|\ Set to|
|00005d20| 20 6c 69 73 74 20 74 6f | 20 6e 75 6c 6c 0d 09 63 | list to| null..c|
|00005d30| 6c 65 61 72 3a 20 73 69 | 7a 65 20 20 20 63 6c 65 |lear: si|ze cle|
|00005d40| 61 72 78 3a 20 5b 73 65 | 6c 66 5d 20 20 3b 6d 0d |arx: [se|lf] ;m.|
|00005d50| 0d 3a 6d 20 41 44 44 3a | 09 09 5c 20 28 20 76 61 |.:m ADD:|..\ ( va|
|00005d60| 6c 20 2d 2d 20 29 20 20 | 61 64 64 20 76 61 6c 75 |l -- ) |add valu|
|00005d70| 65 20 74 6f 20 65 6e 64 | 20 6f 66 20 6c 69 73 74 |e to end| of list|
|00005d80| 0d 09 67 65 74 3a 20 73 | 69 7a 65 20 20 6c 69 6d |..get: s|ize lim|
|00005d90| 69 74 20 20 3e 3d 20 20 | 3f 65 72 72 6f 72 20 31 |it >= |?error 1|
|00005da0| 33 37 0d 09 67 65 74 3a | 20 73 69 7a 65 20 20 74 |37..get:| size t|
|00005db0| 6f 3a 20 5b 73 65 6c 66 | 5d 20 20 31 20 2b 3a 20 |o: [self|] 1 +: |
|00005dc0| 73 69 7a 65 20 20 3b 6d | 0d 0d 3a 6d 20 4c 41 53 |size ;m|..:m LAS|
|00005dd0| 54 3a 09 09 5c 20 28 20 | 2d 2d 20 76 61 6c 20 29 |T:..\ ( |-- val )|
|00005de0| 20 20 52 65 74 75 72 6e | 73 20 63 6f 6e 74 65 6e | Return|s conten|
|00005df0| 74 73 20 6f 66 20 65 6e | 64 20 6f 66 20 6c 69 73 |ts of en|d of lis|
|00005e00| 74 0d 09 67 65 74 3a 20 | 73 69 7a 65 20 20 64 75 |t..get: |size du|
|00005e10| 70 20 30 3d 20 20 3f 65 | 72 72 6f 72 20 31 33 36 |p 0= ?e|rror 136|
|00005e20| 0d 09 31 2d 20 20 61 74 | 3a 20 5b 73 65 6c 66 5d |..1- at|: [self]|
|00005e30| 20 20 3b 6d 0d 0d 3a 6d | 20 52 45 4d 4f 56 45 3a | ;m..:m| REMOVE:|
|00005e40| 20 20 7b 20 69 6e 64 78 | 20 5c 20 63 6e 74 20 77 | { indx| \ cnt w|
|00005e50| 69 64 20 61 64 64 72 20 | 2d 2d 20 7d 09 5c 20 52 |id addr |-- }.\ R|
|00005e60| 65 6d 6f 76 65 73 20 74 | 68 65 20 65 6c 65 6d 65 |emoves t|he eleme|
|00005e70| 6e 74 20 61 74 20 69 6e | 64 65 78 0d 09 67 65 74 |nt at in|dex..get|
|00005e80| 3a 20 73 69 7a 65 20 20 | 69 6e 64 78 20 2d 20 20 |: size |indx - |
|00005e90| 31 2d 20 20 2d 3e 20 63 | 6e 74 0d 09 63 6e 74 20 |1- -> c|nt..cnt |
|00005ea0| 30 3c 20 20 3f 65 72 72 | 6f 72 20 31 33 36 0d 09 |0< ?err|or 136..|
|00005eb0| 77 69 64 74 68 3a 20 5b | 73 65 6c 66 5d 20 20 2d |width: [|self] -|
|00005ec0| 3e 20 77 69 64 0d 09 69 | 6e 64 78 20 20 5e 65 6c |> wid..i|ndx ^el|
|00005ed0| 65 6d 3a 20 5b 73 65 6c | 66 5d 20 20 2d 3e 20 61 |em: [sel|f] -> a|
|00005ee0| 64 64 72 0d 09 31 20 2d | 3a 20 73 69 7a 65 0d 09 |ddr..1 -|: size..|
|00005ef0| 63 6e 74 20 20 30 65 78 | 69 74 0d 09 61 64 64 72 |cnt 0ex|it..addr|
|00005f00| 20 77 69 64 20 2b 20 20 | 61 64 64 72 20 20 63 6e | wid + |addr cn|
|00005f10| 74 20 77 69 64 20 2a 20 | 20 6d 6f 76 65 20 20 3b |t wid * | move ;|
|00005f20| 6d 0d 0d 3a 6d 20 49 4e | 44 45 58 4f 46 3a 20 20 |m..:m IN|DEXOF: |
|00005f30| 7b 20 76 61 6c 20 5c 20 | 5e 73 65 6c 66 20 5e 67 |{ val \ |^self ^g|
|00005f40| 65 74 65 6c 65 6d 20 77 | 69 64 20 61 64 64 72 20 |etelem w|id addr |
|00005f50| 2d 2d 20 69 6e 64 78 20 | 54 20 20 7c 20 2d 2d 20 |-- indx |T | -- |
|00005f60| 46 20 7d 0d 09 09 09 09 | 5c 20 46 69 6e 64 73 20 |F }.....|\ Finds |
|00005f70| 61 20 76 61 6c 75 65 20 | 69 6e 20 61 20 63 6f 6c |a value |in a col|
|00005f80| 6c 65 63 74 69 6f 6e 2e | 0d 09 73 65 6c 66 20 20 |lection.|..self |
|00005f90| 62 69 6e 64 5f 77 69 74 | 68 20 67 65 74 65 6c 65 |bind_wit|h getele|
|00005fa0| 6d 3a 20 20 2d 3e 20 5e | 67 65 74 65 6c 65 6d 20 |m: -> ^|getelem |
|00005fb0| 20 2d 3e 20 5e 73 65 6c | 66 0d 09 77 69 64 74 68 | -> ^sel|f..width|
|00005fc0| 3a 20 5b 73 65 6c 66 5d | 20 20 2d 3e 20 77 69 64 |: [self]| -> wid|
|00005fd0| 20 20 69 64 78 62 61 73 | 65 20 2d 3e 20 61 64 64 | idxbas|e -> add|
|00005fe0| 72 0d 09 66 61 6c 73 65 | 20 20 67 65 74 3a 20 73 |r..false| get: s|
|00005ff0| 69 7a 65 20 20 30 0d 09 | 3f 64 6f 0d 09 09 61 64 |ize 0..|?do...ad|
|00006000| 64 72 20 20 5e 73 65 6c | 66 20 5e 67 65 74 65 6c |dr ^sel|f ^getel|
|00006010| 65 6d 20 20 65 78 2d 6d | 65 74 68 6f 64 0d 09 09 |em ex-m|ethod...|
|00006020| 76 61 6c 20 3d 20 20 69 | 66 20 20 64 72 6f 70 20 |val = i|f drop |
|00006030| 20 69 20 20 74 72 75 65 | 20 20 6c 65 61 76 65 20 | i true| leave |
|00006040| 20 74 68 65 6e 0d 09 09 | 77 69 64 20 2b 2b 3e 20 | then...|wid ++> |
|00006050| 61 64 64 72 0d 09 6c 6f | 6f 70 20 20 3b 6d 0d 0d |addr..lo|op ;m..|
|00006060| 3a 6d 20 50 52 49 4e 54 | 3a 0d 09 67 65 74 3a 20 |:m PRINT|:..get: |
|00006070| 73 69 7a 65 20 20 30 20 | 20 3f 64 6f 20 20 69 20 |size 0 | ?do i |
|00006080| 20 61 74 3a 20 5b 73 65 | 6c 66 5d 20 20 63 72 20 | at: [se|lf] cr |
|00006090| 2e 20 20 6c 6f 6f 70 20 | 20 3b 6d 0d 0d 3a 6d 20 |. loop | ;m..:m |
|000060a0| 44 55 4d 50 3a 0d 09 64 | 75 6d 70 3a 20 73 75 70 |DUMP:..d|ump: sup|
|000060b0| 65 72 20 20 2e 22 20 73 | 69 7a 65 3a 20 22 20 20 |er ." s|ize: " |
|000060c0| 67 65 74 3a 20 73 69 7a | 65 20 2e 20 20 3b 6d 0d |get: siz|e . ;m.|
|000060d0| 0d 3b 63 6c 61 73 73 0d | 0d 0d 5c 20 4f 72 64 65 |.;class.|..\ Orde|
|000060e0| 72 65 64 2d 43 6f 6c 6c | 65 63 74 69 6f 6e 20 69 |red-Coll|ection i|
|000060f0| 73 20 61 20 63 6f 6c 6c | 65 63 74 69 6f 6e 20 6f |s a coll|ection o|
|00006100| 66 20 34 2d 62 79 74 65 | 20 63 65 6c 6c 73 2e 0d |f 4-byte| cells..|
|00006110| 0d 3a 63 6c 61 73 73 09 | 4f 52 44 45 52 45 44 2d |.:class.|ORDERED-|
|00006120| 43 4f 4c 09 73 75 70 65 | 72 7b 20 28 63 6f 6c 29 |COL.supe|r{ (col)|
|00006130| 20 61 72 72 61 79 20 7d | 0d 3b 63 6c 61 73 73 09 | array }|.;class.|
|00006140| 09 09 09 09 09 5c 20 54 | 68 61 74 27 73 20 61 6c |.....\ T|hat's al|
|00006150| 6c 2c 20 66 6f 6c 6b 73 | 21 21 0d 0d 0d 5c 20 58 |l, folks|!!...\ X|
|00006160| 2d 43 4f 4c 20 69 73 20 | 61 20 63 6f 6c 6c 65 63 |-COL is |a collec|
|00006170| 74 69 6f 6e 20 6f 66 20 | 65 78 65 63 75 74 69 6f |tion of |executio|
|00006180| 6e 20 74 6f 6b 65 6e 73 | 2e 0d 0d 3a 63 6c 61 73 |n tokens|...:clas|
|00006190| 73 09 58 2d 43 4f 4c 09 | 73 75 70 65 72 7b 20 20 |s.X-COL.|super{ |
|000061a0| 28 63 6f 6c 29 20 20 78 | 2d 61 72 72 61 79 20 20 |(col) x|-array |
|000061b0| 7d 0d 0d 3a 6d 20 20 52 | 45 4d 4f 56 45 58 54 3a |}..:m R|EMOVEXT:|
|000061c0| 09 5c 20 28 20 78 74 20 | 2d 2d 20 29 0d 09 66 61 |.\ ( xt |-- )..fa|
|000061d0| 6c 73 65 20 2d 3e 20 72 | 65 6c 6f 63 43 68 6b 3f |lse -> r|elocChk?|
|000061e0| 20 20 70 61 64 20 72 65 | 6c 6f 63 21 20 20 74 72 | pad re|loc! tr|
|000061f0| 75 65 20 2d 3e 20 72 65 | 6c 6f 63 43 68 6b 3f 0d |ue -> re|locChk?.|
|00006200| 09 70 61 64 20 40 20 20 | 69 6e 64 65 78 6f 66 3a |.pad @ |indexof:|
|00006210| 20 73 65 6c 66 20 20 30 | 45 58 49 54 0d 09 72 65 | self 0|EXIT..re|
|00006220| 6d 6f 76 65 3a 20 73 65 | 6c 66 20 20 3b 6d 0d 0d |move: se|lf ;m..|
|00006230| 3a 6d 20 20 50 52 49 4e | 54 3a 0d 09 67 65 74 3a |:m PRIN|T:..get:|
|00006240| 20 73 69 7a 65 20 20 70 | 72 69 6e 74 4e 58 74 73 | size p|rintNXts|
|00006250| 3a 20 73 65 6c 66 20 20 | 3b 6d 0d 0d 3b 63 6c 61 |: self |;m..;cla|
|00006260| 73 73 0d 0d 0d 0d 0d 3a | 63 6c 61 73 73 09 44 49 |ss.....:|class.DI|
|00006270| 43 2d 4d 41 52 4b 09 73 | 75 70 65 72 7b 20 6f 62 |C-MARK.s|uper{ ob|
|00006280| 6a 65 63 74 20 7d 0d 0d | 23 74 68 72 65 61 64 73 |ject }..|#threads|
|00006290| 09 61 72 72 61 79 09 4c | 49 4e 4b 53 0d 72 65 63 |.array.L|INKS.rec|
|000062a0| 6f 72 64 20 7b 09 69 6e | 74 09 09 43 55 52 52 45 |ord {.in|t..CURRE|
|000062b0| 4e 54 09 7d 0d 0d 70 72 | 69 76 61 74 65 0d 0d 3a |NT.}..pr|ivate..:|
|000062c0| 6d 20 20 53 45 54 43 3a | 20 20 7b 20 5c 20 61 64 |m SETC:| { \ ad|
|000062d0| 64 72 20 69 6e 64 65 78 | 20 2d 2d 20 69 6e 64 65 |dr index| -- inde|
|000062e0| 78 20 7d 0d 09 30 20 2d | 3e 20 61 64 64 72 20 20 |x }..0 -|> addr |
|000062f0| 30 20 2d 3e 20 69 6e 64 | 65 78 0d 09 23 74 68 72 |0 -> ind|ex..#thr|
|00006300| 65 61 64 73 20 46 4f 52 | 0d 09 09 69 20 61 74 3a |eads FOR|...i at:|
|00006310| 20 6c 69 6e 6b 73 20 20 | 64 75 70 20 61 64 64 72 | links |dup addr|
|00006320| 20 75 3e 0d 09 09 49 46 | 20 20 2d 3e 20 61 64 64 | u>...IF| -> add|
|00006330| 72 20 20 69 20 2d 3e 20 | 69 6e 64 65 78 20 20 45 |r i -> |index E|
|00006340| 4c 53 45 20 20 64 72 6f | 70 20 20 54 48 45 4e 0d |LSE dro|p THEN.|
|00006350| 09 4e 45 58 54 0d 09 69 | 6e 64 65 78 20 20 70 75 |.NEXT..i|ndex pu|
|00006360| 74 3a 20 63 75 72 72 65 | 6e 74 20 20 3b 6d 0d 70 |t: curre|nt ;m.p|
|00006370| 75 62 6c 69 63 0d 0d 3a | 6d 20 43 55 52 52 45 4e |ublic..:|m CURREN|
|00006380| 54 3a 0d 09 67 65 74 3a | 20 63 75 72 72 65 6e 74 |T:..get:| current|
|00006390| 20 20 61 74 3a 20 6c 69 | 6e 6b 73 20 20 3b 6d 0d | at: li|nks ;m.|
|000063a0| 0d 3a 6d 20 53 45 54 3a | 20 20 7b 20 61 64 64 72 |.:m SET:| { addr|
|000063b0| 20 2d 2d 20 7d 0d 09 23 | 74 68 72 65 61 64 73 20 | -- }..#|threads |
|000063c0| 46 4f 52 0d 09 09 63 6f | 6e 74 65 78 74 20 20 69 |FOR...co|ntext i|
|000063d0| 20 20 32 20 3c 3c 20 20 | 2b 20 20 64 69 73 70 6c | 2 << |+ displ|
|000063e0| 61 63 65 0d 09 09 42 45 | 47 49 4e 09 64 75 70 20 |ace...BE|GIN.dup |
|000063f0| 61 64 64 72 20 75 3e 09 | 09 09 5c 20 57 65 27 72 |addr u>.|..\ We'r|
+--------+-------------------------+-------------------------+--------+--------+
Only 25.0 KB of data is shown above.